Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#1

Ereignisse benutzen ohne ein Object zu erzeugen

  Alt 17. Jul 2003, 02:40
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
  Mit Zitat antworten Zitat