Tema: Interfaces
Ver Mensaje Individual
  #6  
Antiguo 14-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Reputación: 26
delphi.com.ar Va por buen camino
Para las clases, los datalinks dispara métodos en las clases cuando estos reciben alguna notificación.
Esto es un pedazo muy recortado del código, así que no pretendan que funcione:

La Interface:
Código:
  
  IDBLookupControl = interface
    ...
    procedure UpdateDataFields;
    procedure UpdateListFields;
    procedure ListLinkDataChanged;
    ...
  end;
Un DataLink:
Código:
  
TListSourceLookupLink = class(TDataLink)
  private
    ILookup: IDBLookupControl;
  protected
    procedure ActiveChanged; override;
    procedure DataSetChanged; override;
    procedure LayoutChanged; override;
    ...
  public
    constructor Create(ALookupInterface: IDBLookupControl);
    ...
  end;

implementation

{ TListSourceLookupLink }

procedure TListSourceLookupLink.ActiveChanged;
begin
  if Assigned(ILookup) then
    ILookup.UpdateListFields;
end;

constructor TListSourceLookupLink.Create(ALookupControl: TWinControl; ALookupInterface: IDBLookupControl);
begin
  inherited Create;
  ...
  ILookup := ALookupInterface;
end;

procedure TListSourceLookupLink.DataSetChanged;
begin
  if Assigned(ILookup) then
    ILookup.ListLinkDataChanged;
end;


procedure TListSourceLookupLink.LayoutChanged;
begin
  if Assigned(ILookup) then
    ILookup.UpdateListFields;
end;
Uno de los Componentes:
Código:
  TCustomDBLookupControl = class(TCustomIncSearchEdit, IDBLookupControl)
  protected
    ...
    procedure UpdateDataFields; virtual;
    procedure UpdateListFields; virtual;
    procedure ListLinkDataChanged; virtual; abstract;
    ...
  end;

¿Fui claro?... sino, ya saben!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita