AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Procedurale Typen auf Stack speichern

Ein Thema von bernau · begonnen am 18. Mär 2019 · letzter Beitrag vom 18. Mär 2019
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#1

Procedurale Typen auf Stack speichern

  Alt 18. Mär 2019, 19: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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#2

AW: Procedurale Typen auf Stack speichern

  Alt 18. Mär 2019, 19:58
Der Compiler denkt, du möchtest der Variablen FOnNotifyEvent die function TStack.Pop zuweisen und lässt das nicht zu. So geht's aber doch:

fOnActiveEvent := fEventStack.Pop();
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#3

AW: Procedurale Typen auf Stack speichern

  Alt 18. Mär 2019, 20:15
Der Compiler denkt, du möchtest der Variablen FOnNotifyEvent die function TStack.Pop zuweisen und lässt das nicht zu. So geht's aber doch:

fOnActiveEvent := fEventStack.Pop();
Da muss man erst einmal drauf kommen.

Danke dir.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz