Delphi – Um evento “Anonimous” para seus objetos

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]

 

Exemplos

Este post foi inspirado no livro do Nick Hodges “Coding in Delphi”

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *