AGB  ·  Datenschutz  ·  Impressum  







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

Events vergleichen

Ein Thema von igel457 · begonnen am 18. Aug 2006 · letzter Beitrag vom 18. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Events vergleichen

  Alt 18. Aug 2006, 17:54
Hallo, ich habe ein "kleines" Problem...

Und zwar setze ich mit...
Delphi-Quellcode:
procedure TDXLuaGUIManager.ACallBack1(Sender:TObject);
begin
  with Sender as TDXComponent do
  begin
    OnClick := AClick;
  end;
end;
...OnClick (TNotifyEvent) einer Komponente auf die Prozedut AClick. Die Deklaration davon sieht so aus:
procedure AClick(Sender:TObject); Nun möchte ich überprüfen, ob OnClick auf AClick gesetzt worden ist.
Der Code von mir:
Delphi-Quellcode:
procedure TDXLuaGUIManager.ACallBack2(Sender:TObject);
begin
  with Sender as TDXComponent do
  begin
    if OnClick = AClick| then OnClick := nil;
  end;
end;
Leider spuckt mir der Compiler bei | eine Fehlermeldung (E2035 Nicht genügend wirkliche Parameter) aus.
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!
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Events vergleichen

  Alt 18. Aug 2006, 17:57
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

3. was zum Geier soll | sein? oder soll das nur die Stelle markieren??

  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Events vergleichen

  Alt 18. Aug 2006, 18:02
1. Geht nicht, Ich will wissen ob das Event mit dieser Funktion verküpft ist
2.
3. Ja, soll nur die Stelle makieren
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: Events vergleichen

  Alt 18. Aug 2006, 18:05
Tendenziellif TMethod(OnCreate).Code = Addr(TKlasse.AClick) then Stellt sich nur die Frage, ob man das Problem nicht anders lösen sollte...
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Events vergleichen

  Alt 18. Aug 2006, 18:08
Zitat von NicoDE:
Tendenziellif TMethod(OnCreate).Code = Addr(TKlasse.AClick) then Stellt sich nur die Frage, ob man das Problem nicht anders lösen sollte...
Mh...
Funktioniert leider nicht,
Wie würdest du denn das Problem lösen?
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: Events vergleichen

  Alt 18. Aug 2006, 18:12
Zitat von igel457:
Funktioniert leider nicht,
Wie würdest du denn das Problem lösen?
Meine Glaskugel ist in der Reinigung

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 -> ???)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Events vergleichen

  Alt 18. Aug 2006, 18:26
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...
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

Re: Events vergleichen

  Alt 18. Aug 2006, 18:36
Zitat von igel457:
Ich hoffe das war verständlich...
Ja, danke.

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.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Events vergleichen

  Alt 18. Aug 2006, 18:44
Danke für die Antwort.

Jetzt ist mein Problem nur noch an die Addresse der Funktion meiner Klasse zu kommen.
Denn bei
Code:
@AClick
oder
Code:
Addr(AClick)
meckert Compiler mit "Variable erforderlich".
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#10

Re: Events vergleichen

  Alt 18. Aug 2006, 19:58
Welche Klasse implementiert AClick?
Wenn es TFoo wäre, dann:Addr(TFoo.AClick)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:57 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