Autor Beitrag
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Mi 24.06.09 21:15 
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:

www.delphi-treff.de/...n-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:

ausblenden Delphi-Quelltext
1:
TFehlerEvent = procedure(Param1: stringof 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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mi 24.06.2009 um 23:33
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Fr 26.06.09 12:00 
Vielen Dank! :D
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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.