Hier ein kleines Beispiel: ich möchte meiner Klasse eine Komponente zuweisen und mit ihr arbeiten. Es soll eine Klasse bleiben, keine neue Komponente. Nun kam ich auf die Idee, dass ich noch mehr machen könnte und auch auf Ereignisse der Komponente reagieren könnte. Hier das Ergebnis meiner vorläufigen Überlegung in einer Beispielklasse:
Delphi-Quellcode:
type
TIrgendwas =
class
private
FPanel: TPanel;
FPanelOnClick: TNotifyEvent;
procedure PanelClick(Sender: TObject);
public
constructor Create(APanel: TPanel);
destructor Destroy;
override;
end;
procedure TIrgendwas.PanelClick(Sender: TObject);
begin
//Beispiel für irgendeine Aktion
FPanel.Color :=
RGB(Random(256), Random(256), Random(256));
//Hier den Klick an Panel weitergeben
FPanel.OnClick := FPanelOnClick;
//Zuerst alten Zustand herstellen, sonst Schleife
FPanel.OnClick(Sender);
//Originalereignis ausführen
FPanel.OnClick := PanelClick;
//Wieder auf eigene Prozedur umleiten
end;
constructor TIrgendwas.Create(APanel: TPanel);
begin
FPanel := APanel;
FPanelOnClick := FPanel.OnClick;
//Alten Zustand merken
FPanel.OnClick := PanelClick;
//Auf eigene Prozedur umleiten
end;
destructor TIrgendwas.Destroy;
begin
FPanel.OnClick := FPanelOnClick;
end;
var
Irgendwas: TIrgendwas;
procedure TForm1.FormCreate(Sender: TObject);
begin
Irgendwas := TIrgendwas.Create(Panel1);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Irgendwas.Free;
end;
procedure TForm1.Panel1Click(Sender: TObject);
begin
ShowMessage('
Und weiter mit PanelClick.');
end;
Zuerst das Positive: es funktioniert (zumindest zum Teil), es gefällt mir aber nicht. Das sieht mir zu sehr gebastelt aus. Außerdem, wenn einer Panel1 zwischendurch von Hand den OnClick neu zuweist, ist die ganze Anpassung in der Klasse Geschichte. Letztendlich funktioniert das ganze nur, ist aber keine wirkliche Lösung.
Gibt es eine elegantere Methode sich in ein Ereignis einzuklinken? Ich will das Ereignis nicht übernehmen, ich will mich nur einhacken. Am besten bevor die eigentliche Prozedur ausgeführt wird, damit ich einige Manipulationen ausführen kann.