Quando se trata de eventos o mais comum é encontrar uma propriedade que recebe um ponteiro para um procedimento.
Um tipo de evento comum é
property OnClick:TNotifyEvent ….
Para atribuir o evento ao objeto é preciso construir um procedimento para a classe e associá-lo ao evento do objeto, se você já tentou atribuir um procedimento que não esta ligado a uma classe, já notou que há limitações.
Porque criar um novo procedimento em uma classe que será utilizado em um objeto específico… Com eventos anônimos não precisa. (fontes)
[code lang=”pascal”]
TMinhaClasse = class(TObjectExt)
end;
…..
var FObjMinhaClasse:TMinhaClass;
begin
// definindo o evento anônimo
FObjMinhaClasse:= TMinhaClasse.create;
FObjMinhaClasse.onFireEvent := procedure (sender:TObject)
begin
……
end;
end;
…
// usando o evento anônimo
FObjMinhaClasse.FireEvent(sender);
[/code]
Recriando TObject
[code lang=”pascal”]
TObject = class(System.TObject)
private
FOnFireEvent: TProc<TObject>;
procedure SetOnFireEvent(const Value: TProc<TObject>);
public
procedure FireEvent;overload;
procedure FireEvent(Sender:TObject);overload;
property OnFireEvent:TProc<TObject> read FOnFireEvent write SetOnFireEvent;
end;
…..
{ TObject }
procedure TObject.FireEvent;
begin
FireEvent(self);
end;
procedure TObject.FireEvent(Sender: TObject);
begin
if assigned(FOnFireEvent) then
FonFireEvent(Sender);
end;
procedure TObject.SetOnFireEvent(const Value: TProc<TObject>);
begin
FOnFireEvent := Value;
end;
[/code]
Este post foi inspirado no livro do Nick Hodges “Coding in Delphi”