![]() |
Events vergleichen
Hallo, ich habe ein "kleines" Problem...
Und zwar setze ich mit...
Delphi-Quellcode:
...OnClick (TNotifyEvent) einer Komponente auf die Prozedut AClick. Die Deklaration davon sieht so aus:
procedure TDXLuaGUIManager.ACallBack1(Sender:TObject);
begin with Sender as TDXComponent do begin OnClick := AClick; end; end;
Delphi-Quellcode:
Nun möchte ich überprüfen, ob OnClick auf AClick gesetzt worden ist.
procedure AClick(Sender:TObject);
Der Code von mir:
Delphi-Quellcode:
Leider spuckt mir der Compiler bei | eine Fehlermeldung (E2035 Nicht genügend wirkliche Parameter) aus.
procedure TDXLuaGUIManager.ACallBack2(Sender:TObject);
begin with Sender as TDXComponent do begin if OnClick = AClick| then OnClick := nil; end; end; Ich habe leider keine Ahnung, wie ich diesen Vergleich durführen kann. Ich habe es auch schon mit der Addresse (@) versucht, aber das hat auch nicht funktioniert. Danke! |
Re: Events vergleichen
Wie wärs
1. if assigned(...) wobei du dann halt nicht genau weist WAS zugewießen wurde, aber das muss ja auch vielleicht garnicht sein 2. boolean variable beim setzen auf true setzen :stupid: 3. was zum Geier soll | sein? oder soll das nur die Stelle markieren?? :stupid: |
Re: Events vergleichen
1. Geht nicht, Ich will wissen ob das Event mit dieser Funktion verküpft ist
2. :roll: 3. Ja, soll nur die Stelle makieren |
Re: Events vergleichen
Tendenziell
Delphi-Quellcode:
Stellt sich nur die Frage, ob man das Problem nicht anders lösen sollte...
if TMethod(OnCreate).Code = Addr(TKlasse.AClick) then
|
Re: Events vergleichen
Zitat:
Funktioniert leider nicht, Wie würdest du denn das Problem lösen? |
Re: Events vergleichen
Zitat:
Weder kann ich dir sagen warum es nicht funktioniert (da ich nicht weiß, was nicht funktioniert), noch kann ich mit den wenigen Informationen eine Lösung für das Problem vorschlagen, dessen Umfang sich von hier aus nicht abschätzen lässt (es ist nichtmal klar, warum Events verglichen werden müssen). ps: du musst an meinem Beispiel natürlich sinnvolle Änderungen vornehmen (OnCreate -> OnClick und TKlasse -> ???) |
Re: Events vergleichen
Sorry...
Ok, mein Problem ist das Folgende: Ich schreibe mein Programm in zweierlei Hinsicht um: Zum einen habe ich ein eigenes GUI System geschrieben, zum anderen binde ich die Skriptsprache LUA, welche u.a. GUI Steuert, in mein Programm ein. Meine GUI besteht aus vielen Komponenten. Diese haben Events. Wird ein Event ausgelöst, so wird eine Entsprechende LUA Funktion (KomponentenName+'OnClick') aufgerufen. Da ich die Events nicht "per Hand" mit LUA Verbinden möchte, habe ich mir eine Klasse geschrieben (TDXLuaGUIManager) welche alle Events der Komponenten mit einem eigenem Handler (AClick) verknüpft und der dann die entsprechende LUA Funktion aufruft. Die Klasse hat eine Funktion TDXLuaManager.Connect, die alle Komponenten durchgeht und deren OnClick Funktion mit AClick verknüpft. Gleichzeitig will ich auch eine Disconnect Funktion haben die das OnClick Ereigniss aller Funktionen auf NIL setzt. Allerdings kann es ja vorgekommen sein, dass man OnClick zwischenzeitlich mit etwas anderem verknüpft hat und diese Verknüpfung dann auch ins Nirvana zeigen würde. Deshalb will ich überprüfen ob OnClick auch wirklich mit AClick verknüpft ist. Ich hoffe das war verständlich... |
Re: Events vergleichen
Zitat:
OnClick ist eine Methoden-Variable. Methoden-Referenzen bestehen intern aus zwei Teilen: (1) einer Self-Referenz (TMethod.Data) und (2) einer Adresse einer Funktion einer Klasse (TMethod.Code). Wenn du nun prüfen willst ob die Event-Variable (intern TMethod) auf eine bestimmte Funktion einer Klasse zeigt, dann musst du TMethod(EventVariable).Code mit der Adresse der Funktion einer Klasse vergleichen (da dich die Self-Referenz von TMethod nicht interessiert). ps: ich hoffe das war halbwegs verständlich. |
Re: Events vergleichen
Danke für die Antwort.
Jetzt ist mein Problem nur noch an die Addresse der Funktion meiner Klasse zu kommen. Denn bei
Code:
oder
@AClick
Code:
meckert Compiler mit "Variable erforderlich".
Addr(AClick)
|
Re: Events vergleichen
Welche Klasse implementiert AClick?
Wenn es TFoo wäre, dann:
Delphi-Quellcode:
Addr(TFoo.AClick)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 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-2025 by Thomas Breitkreuz