![]() |
Events
Hallo,
ich arbeite gerade zum Lernen ein paar Komponenten-Sourcecodes durch. Dabei ist mir folgendes aufgefallen: In einer Komponente wurde folgendes selbsterklärendes Event erstellt:
Delphi-Quellcode:
Der Aufruf erfolgt weiter unten im Source in einer Prozedur, welche die Message wm_mouseexit o.ä. abfängt, wie folgt:
FOnMouseExit : TNotifyEvent;
Delphi-Quellcode:
So weit so gut. Ich habe es aber bisher immer so gemacht, daß ich ein Ereignis zuerst definiert habe mit
if assigned(FOnMouseExit) then
FOnMouseExit(Self);
Delphi-Quellcode:
Das Auslösen des Ereinisses erfolgte analog zu o.g. Beispiel - und funktioniert übrigens ebenfall tadellos. Nun meine Frage: Wo ist der Unterschied / vor- oder Nachteil der beiden Funktionen?!?
Type TMeinEreignis = procedure of object;
[...] VAR MeinEreignis : TMeinEreignis; [...] Noch was: Gibt es irgendwo im Netz gute Tutorials zum Thema Event und Messages. Ich arbeite mich da gerade zwar ein, aber steige irgendwie noch nicht ganz durch. Die ganzen WM_xxx messages SC_xxx etc. bringen mich noch ziemlich durcheinander, ebenso die messages, welche noch parameter besitzen (z.B. WM_KEYUPMSG o.ä.). Die Einsteigertutorials des Forums habe ich übrigens schon durchgearbeitet, ich würde aber gerne mehr "Hinter die Kulissen" schauen. Hoffe Ihr könnt mir weiterhelfen, SCRaT |
Re: Events
Der Unterschied zwischen deinem TEreignis und TNotifyEvent?
naja ganz einfach:
Delphi-Quellcode:
Oder habe ich was falsch verstanden?
TNotifyEvent = procedure(Sender:TObject) of Object;
TMeinEreignis = procedure of object; |
Re: Events
Moin Scrat,
ein wesentlicher Unterschied besteht da nicht. TNotifyEvent ist so deklariert (sollte auch in der Hilfe stehen):
Delphi-Quellcode:
Du verwendest nur eine Variable, wohingegen man in einer Komponente für so etwas private-Felder benutzt.
type TNotifyEvent = procedure (Sender: TObject) of object;
|
Re: Events
ok, so weit ist es mir jetzt klar. Aber was für einen Vorteil hat denn der Paramter von Notifyevent (Sender: TObject) in der Praxis? Ich muss ihn ja dann auch z.B. in der Prozedur mit FOnMouseExit(Self) aufrufen, nur der Vorteil ist mir nicht ganz klar. Es wird ja in der Komponente immer nur "self" übergeben (s.o. if assigned....) oder wann könnte der Parameter einen anderen Wert annehmen?!?
Zitat:
|
Re: Events
Du kannst zum Beispiel mehren Buttons das gleiche OnClick zuweisen. Durch den übergebenen Sender kannst du dann herausfinden welcher Button diese Procedure aufgerufen hat. Zudem gibt es ja nicht nur diesen Parameter. Zum Beispiel gibt es bei vielen Komponenten auch ein OnCustomDraw wo übergeben wird welcher Teil neu gemalt wird etc.
Zudem muss ein Event nicht immer nur benachrichtigen sondern kann auch abfragen (als Funktion oder mit var-Parameter) |
Re: Events
Zitat:
SCRaT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 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