![]() |
Delphi-Version: 10.2 Tokyo
Procedurale Typen auf Stack speichern
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:
Warum bleibt der Compiler beim Pop hängen? Umgekehrt beim Push geht es doch.
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; |
AW: Procedurale Typen auf Stack speichern
Der Compiler denkt, du möchtest der Variablen
Delphi-Quellcode:
die
FOnNotifyEvent
Delphi-Quellcode:
zuweisen und lässt das nicht zu. So geht's aber doch:
function TStack.Pop
Delphi-Quellcode:
fOnActiveEvent := fEventStack.Pop();
|
AW: Procedurale Typen auf Stack speichern
Zitat:
Danke dir.:thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz