Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Eigene Komponenten: Ereignisse
Jakob_Ullmann - Mi 24.06.09 21:15
Titel: Eigene Komponenten: Ereignisse
Mich interessiert ja das im Titel genannte Thema (Ereignisse in eigenen Komponenten) gerade brennend. Deshalb hab ich mal ein wenig gegooglet. Und gestoßen bin ich auf folgende Seite:
http://www.delphi-treff.de/tutorials/vcl/komponenten-entwicklen/page/6/
(um ehrlich zu sein hab ich das ganze Ding gelesen, aber bei Seite 6 kam dann der Punkt, den ich nicht mehr verstehe)
Dort steht ja folgendes:
| Zitat: |
Eigene Ereignisse
Wir haben bisher nur "vordefinierte" Ereignisse benutzt. Jetzt lernst du auch, wie man komplett eigene Ereignisse in die Komponente einbindet.
Zuerst brauchen wir einen eigenen Typ für das Ereignis:
Delphi-Quelltext 1:
| TFehlerEvent = procedure(Param1: string) of object; | |
warum brauche ich aber dieses
of object? Damit komm ich absolut nicht klar... Beziehungsweise was bedeutet hier überhaupt ein
procedure(...) of ...? Soll das der Typ eines Parameters sein?
Wäre echt nett, wenn mir jemand sagen könnte, was das heißt.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 24.06.2009 um 23:33
jaenicke - Mi 24.06.09 21:32
Das bedeutet, dass diese Methode zu einem Objekt gehört. Dabei wird nicht nur ein Pointer auf die Methode sondern auch ein Pointer auf das Objekt gespeichert. Deshalb "of object".
Insgesamt wird mit der Typdeklaration angegeben welche Methoden dem Event zugewiesen werden können. Also welche Parameter und ggf. welchen Rückgabewert diese haben müssen.
Deshalb funktionieren ja auch keine einzelnen Funktionen oder Prozeduren als Ereignishandler für OnClick oder so. Denn die sind ja alle mit "of object" deklariert. Und solche einzelnen Funktionen haben eben keins.
Jakob_Ullmann - Fr 26.06.09 12:00
Vielen Dank! :D
delfiphan - Fr 26.06.09 19:03
Technisch gibt's zwei Unterschiede:
1. of object fügt einen versteckten Parameter hinzu. Die Prozedur
procedure(Index: Integer) of object;
entspricht also
procedure(Self: TObject; Index: Integer);
2. Eine Variable, die auf eine of object-Methode zeigt besteht aus 2 Pointern (entspricht einem TMethod): Ein Pointer auf das Objekt und ein Pointer auf den Code. Ohne of object besteht diese nur aus 1 Pointer, der auf den Code zeigt.
Die Unterscheidung muss man machen, weil bei einer Klassenmethode immer Self als Parameter zur Verfügung stehen muss.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!