Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [FreePascal] Ereignisse an Komponenten knüpfen (https://www.delphipraxis.net/116045-%5Bfreepascal%5D-ereignisse-komponenten-knuepfen.html)

xZise 22. Jun 2008 15:55


[FreePascal] Ereignisse an Komponenten knüpfen
 
Hallo DP,
ich habe ein Problem mit Free Pascal: Und zwar wie kann ich Ereignisse an Komponenten knüpfen?

Ich habe es in Delphimanier versucht, allerdings meint er dass nicht genügend Parameter genannt wurden?
Delphi-Quellcode:
FUDP.OnRecieve := FUDPRecieve;
MfG
xZise

1234588 22. Jun 2008 16:23

Re: [FreePascal] Ereignisse an Komponenten knüpfen
 
FUDPRecieve muss eine methode einer klasse sein und muss als pointer uebergeben werden

Apollonius 22. Jun 2008 16:36

Re: [FreePascal] Ereignisse an Komponenten knüpfen
 
Im Zweifel könntest du es auch mal mit einem @ versuchen - Delphi erfordert das nur bei Funktionszeigern.

1234588 22. Jun 2008 16:58

Re: [FreePascal] Ereignisse an Komponenten knüpfen
 
Zitat:

Zitat von Apollonius
Im Zweifel könntest du es auch mal mit einem @ versuchen - Delphi erfordert das nur bei Funktionszeigern.

wie gesagt, muss als pointer uebergeben werden. wie das nun genau gemacht wird, ist imho egal (@, Addr(), TNotifyEvent oder ggf ein anderer typ).

das finde ich an delphi etwas doof. auch bei zeigern die auf records zeigen muss nicht unbedingt dereferenziert werden, fpc ist da schon etwas genauer ;)

xZise 22. Jun 2008 17:05

Re: [FreePascal] Ereignisse an Komponenten knüpfen
 
Cool! Mit "@" meckert er nicht mehr herum! Danke!

MfG
xZise

Apollonius 22. Jun 2008 17:09

Re: [FreePascal] Ereignisse an Komponenten knüpfen
 
Es gibt aber das Problem, dass man TKlasse.Methode sowohl als Funktions- als auch als Methodenzeiger interpretieren kann, bei letzterem eben mit Instanz (manchmal wird das dann auch als gebundener Methodenzeiger bezeichnet, im Gegensatz zu dem, was ich oben Funktionszeiger genannt habe, was aber eigentlich ein ungebundener Methodenzeiger ist), und es nicht ganz einfach ist, da eine vernünftig unterscheidbare Syntax zu finden. Bei Delphi hat man sich eben für ein @ beim ungebundenen und kein @ beim gebundenen entschieden.
Besonders haarig wird es bei Klassenmethoden, die in Delphi ebenfalls gebunden und ungebunden auftauchen können - da könnte dann p := @TKlasse.Klassenmethode je nach dem Typen von p zwei verschiedene Bedeutungen haben, wenn nicht dass @ beim Methodenzeiger verboten wäre. Auf diese Weise hat man zwar ein anderes Problem am Hals, nämlich dann, wenn kein @ gegeben ist, aber aus dem Kontext sollte sich leicht ergeben, ob auf den Methodenzeiger oder das Ergebnis zurückgegriffen wird.

xZise 22. Jun 2008 17:29

Re: [FreePascal] Ereignisse an Komponenten knüpfen
 
Ich versteh das nicht so richtig ;) Aber ich versuche mal es in meinen Worten zusammenzufassen:

Das Problem mit dem "@" ist, dass man nicht weiß ob der Zeiger auf die Methode gemeint ist, oder, wenn es eine Funktion ist, der Rückgabewert der Methode.

Ist das korrekt wiedergegeben? Naja, da es eine "procedure" ist, ist das kein Problem.

MfG
xZise

Apollonius 22. Jun 2008 17:33

Re: [FreePascal] Ereignisse an Komponenten knüpfen
 
Nein, du kannst keine Adresse eines Rückgabewertes nehmen. Der Punkt ist, dass du eine parameterlose Methode ohne Rückgabewert entweder als procedure(Self: TIrgendwas) (ungebundener Methodenzeiger, auch wenn du in Delphi nur Pointer nehmen darfst, wenn du nicht castest) oder als procedure of object (gebundener Methodenzeiger) interpretieren kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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