Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Procedurale Typen auf Stack speichern

  Alt 18. Mär 2019, 18:19
Delphi-Version: 10.2 Tokyo
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.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat