Einem Event ist eine Procedure zugewiesen. Macht man tausend mal im Code.
Was ich nun möchte ist kurzzeitig eine andere Procedure zuweisen und später wieder die vorherige Zuweisung haben. Ich dachte man kann da gut mit Generics arbeiten. Also habe ich mal etwas rumgespielt. Klappt aber nicht so ganz.
Hier der BeispielCode:
Delphi-Quellcode:
type
TFormEventStackTest = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
fOnActiveEvent: TNotifyEvent;
fEventStack: TStack<TNotifyEvent>;
public
property OnActiveEvent:TNotifyEvent read fOnActiveEvent write fOnActiveEvent;
Procedure PushEvent(aEvent:TNotifyEvent);
procedure PopEvent;
end;
var
FormEventStackTest: TFormEventStackTest;
implementation
{$R *.dfm}
procedure TFormEventStackTest.FormCreate(Sender: TObject);
begin
fEventStack:=TStack<TNotifyEvent>.Create;
end;
procedure TFormEventStackTest.FormDestroy(Sender: TObject);
begin
fEventStack.Free;
end;
procedure TFormEventStackTest.PushEvent(aEvent: TNotifyEvent);
begin
// Actives Event auf den Stack
fEventStack.Push(fOnActiveEvent);
// Nun ist das neue zugewiesen
fOnActiveEvent := aEvent;
end;
procedure TFormEventStackTest.PopEvent;
begin
// vorheriges Event wieder aktivieren.
fOnActiveEvent := fEventStack.Pop; // E2010 Inkompatible Typen: 'procedure, untyped pointer or untyped parameter' und 'TNotifyEvent'
end;
Warum bleibt der Compiler beim Pop hängen? Umgekehrt beim Push geht es doch.