AGB  ·  Datenschutz  ·  Impressum  







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

Events

Ein Thema von scrat1979 · begonnen am 18. Feb 2007 · letzter Beitrag vom 18. Feb 2007
Antwort Antwort
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

Events

  Alt 18. Feb 2007, 16:47
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:

FOnMouseExit : TNotifyEvent; Der Aufruf erfolgt weiter unten im Source in einer Prozedur, welche die Message wm_mouseexit o.ä. abfängt, wie folgt:

Delphi-Quellcode:
if assigned(FOnMouseExit) then
    FOnMouseExit(Self);
So weit so gut. Ich habe es aber bisher immer so gemacht, daß ich ein Ereignis zuerst definiert habe mit
Delphi-Quellcode:
Type TMeinEreignis = procedure of object;
[...]
VAR MeinEreignis : TMeinEreignis;
[...]
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?!?

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
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Events

  Alt 18. Feb 2007, 16:49
Der Unterschied zwischen deinem TEreignis und TNotifyEvent?

naja ganz einfach:

Delphi-Quellcode:
TNotifyEvent = procedure(Sender:TObject) of Object;
TMeinEreignis = procedure of object;
Oder habe ich was falsch verstanden?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Events

  Alt 18. Feb 2007, 16:52
Moin Scrat,

ein wesentlicher Unterschied besteht da nicht.
TNotifyEvent ist so deklariert (sollte auch in der Hilfe stehen):

type TNotifyEvent = procedure (Sender: TObject) of object; Du verwendest nur eine Variable, wohingegen man in einer Komponente für so etwas private-Felder benutzt.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Events

  Alt 18. Feb 2007, 17:37
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:
Du verwendest nur eine Variable, wohingegen man in einer Komponente für so etwas private-Felder benutzt.
Das Verstehe ich nicht ganz. Was genau meinst Du damit?
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Events

  Alt 18. Feb 2007, 17:43
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Events

  Alt 18. Feb 2007, 21:56
Zitat von SirThornberry:
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)
Hmmm.. ok, ich werde es mal testen. Vielleicht werde ich ja aus dem Verhalten des Programmes etwas mehr vertraut, die Hintergrundinfos habe ich ja jetzt

SCRaT
Michael Kübler
  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 14:00 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