Manchmal kommt es vor das man ein Event eine Objectmethode zuweisen möchte die zentral nur eine Aufgabe hat. Man möchte also z.b. einem OnClick eine feste globale Aktion zuordnen die aber möglichst ohne alloziertes Object auskommt.
Es gibt zwei Wege:
Delphi-Quellcode:
type
TEventSink = class
class procedure DoClick(Sender: TObject);
end;
class procedure TEventSink.DoClick(Sender: TObject);
begin
Beep;
end;
// Beispiele der Anwendung
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.OnClick := TEventSink.DoClick;
end;
initialization
Application.OnIdle := TEventSink.DoClick;
finalization
end;
Oder man arbeitet procedural, mit
Delphi-Quellcode:
procedure DoClick(Self, Sender: Tobject);
// Hier ist wichtig das der erste Parameter der in Methoden versteckte Self Paramter ist.
// Die weiteren Paramter richten sich nach der Deklaration des verwendeten Events.
begin
Beep;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
N: TMethod;
begin
N.Data := nil;
N.Code := @DoClick;
Button1.OnClick := TNotifyEvent(N);
end;
Gruß Hagen