Typparameter in einen String

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Typparameter in einen String

Beitrag von u-boot »

Folgendes Problem an dem ich die letzten tage lange gesucht und doch nichts wirkliches gefunden habe :| :

Irgendwo ist beispielsweise folgender Typ definiert :

Code: Alles auswählen

TDragDropEvent = procedure(Sender, Source: TObject; X,Y: Integer) of object;
Nun hätte ich davon gern einen String mit dem Inhalt der Parameterliste also in diesem Fall: (Sender, Source: TObject; X,Y: Integer).

Vermutlich ist irgendwo in der Typinfo-Unit was zu finden ... nur seh ich wohl den Wald vor Bäumen nicht...
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Typparameter in einen String

Beitrag von theo »

u-boot hat geschrieben: Nun hätte ich davon gern einen String mit dem Inhalt der Parameterliste also in diesem Fall: (Sender, Source: TObject; X,Y: Integer).
Wozu denn? Bzw. was soll denn da genau drinstehen?

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Typparameter in einen String

Beitrag von marcov »

u-boot hat geschrieben:Folgendes Problem an dem ich die letzten tage lange gesucht und doch nichts wirkliches gefunden habe :| :

Irgendwo ist beispielsweise folgender Typ definiert :

Code: Alles auswählen

TDragDropEvent = procedure(Sender, Source: TObject; X,Y: Integer) of object;
Nun hätte ich davon gern einen String mit dem Inhalt der Parameterliste also in diesem Fall: (Sender, Source: TObject; X,Y: Integer).

Vermutlich ist irgendwo in der Typinfo-Unit was zu finden ... nur seh ich wohl den Wald vor Bäumen nicht...
Nein. Nur published methods haben RTTI, und events haben nie RTTI. Ich weiss nicht ob die RTTI fuer published Funktionen auch Parameterliste und Typen hat.

Und meistens braucht mann das auch nicht. RTTI ist langsam. Was wollst du wirklich machen?

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Typparameter in einen String

Beitrag von u-boot »

Was ich machen wollte:

Für diese Lösung http://www.lazarusforum.de/viewtopic.php?t=3215" onclick="window.open(this.href);return false; etwas Code erzeugen lassen. Denn es sollen doch paar mehr Ereignisse werden.

Nur gibts bei verschiedenen eventtypen da momentan etwas probleme.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Typparameter in einen String

Beitrag von u-boot »

Vielleicht weiss mir jemand wie es in der Code- oder Bezeichnervervollständigung gelöst ist ?
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Typparameter in einen String

Beitrag von RSE »

Also um das nochmal alles zusammenzufassen, wenn ich das richtig verstanden habe, dann möchtest du die Events aller auf deiner Komponente platzierten Komponenten auch erhalten, ohne im Vorfeld zu wissen welche Komponenten platziert werden und was für Events diese haben. Also quasi alle Events der unbekannten Child-Komponenten gesammelt "anbieten".

Dann müsstest du die properties durchsuchen, ob du welche davon als Event identifizieren kannst und diese dann weiter auswerten. Gleiches gilt für eventuelle Events, für die gar nicht erst eine property erstellt worden ist, sondern nur eine Variable (das mache ich selbst gelegentlich). Hast du dann events identifiziert (wie auch immer), dann musst du den Typ "dechiffrieren" und dir daraus den Prozedurkopf selber wieder zusammensetzen. Da es wohl dazu keine (ausreichenden) Laufzeitinformationen gibt, wirst du wohl um die Benutzung der Quelltexte oder zumindest Pascal-Header nicht drumherumkommen. Aber wie willst du da automatisch drankommen? Die ToolTips haben da den Vorteil, dass sie in die Entwicklungsumgebung integriert sind. Diesen Vorteil hat deine Komponente nicht, die wird nur benutzt. In Summe sind da einfach zu viele "geht nicht" drin...
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Typparameter in einen String

Beitrag von u-boot »

gut dankeschön ... nun weiss ich wenigstens halbwegs warum das für mich wohl nicht machbar ist....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Typparameter in einen String

Beitrag von pluto »

Aber wie willst du da automatisch drankommen? Die ToolTips haben da den Vorteil, dass sie in die Entwicklungsumgebung integriert sind. Diesen Vorteil hat deine Komponente nicht, die wird nur benutzt. In Summe sind da einfach zu viele "geht nicht" drin...
Wenn ich die Frage richtig verstanden habe, geht das schon. Die RTTI stellt Methoden Bereit mit den man Prüfen kann, welcher Typ Vorliegt ob es z.b. ein Event, eine Eigenschaft oder sonst was ist. Schau dir mal den OI an. Das HTML Panel verwendet auch RTTI(Warum auch immer). Es ist nicht unmöglich. Was auch noch gehen könnte: Du könntest einfach die Botschaft direkt abfangen. In Delphi gab es mal eine Methode, die du neu setzten konntest, die alle Botschaften Abfängt. Ob es sowas auch für Lazarus gibt, weiß ich nicht. Ich werde mal nach schauen.

Wie gesagt: OI und HTML Panel, verwenden beide RTTI oder: Die Funktion "In Dateien Suchen" bringt auch erstaunliches zu Tage, wenn du nach Typischen RTTI Anweisungen in deinem Lazarus Verzeichnis suchst. Es wird nicht einfach, aber es geht, auf die eine oder andere Art und weise. Ich halte "Das Abfangen" von allen Botschaften für die beste Lösung, da musst du keine Laufzeit Informationen mit in die Anwendung packen, es wird vielleicht etwas komplizierter. Ich meine die Methode hieß: WndProc. Einfach neu deklaieren und die alte ersetzen, schon landen alle Botschaften bei dir. Du musst nur sicherstellen, dass die Botschaften auch weiter geleitet werden an die LCL.
MFG
Michael Springwald

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Typparameter in einen String

Beitrag von Hitman »

pluto hat geschrieben: Ich meine die Methode hieß: WndProc. Einfach neu deklaieren und die alte ersetzen, schon landen alle Botschaften bei dir. Du musst nur sicherstellen, dass die Botschaften auch weiter geleitet werden an die LCL.
Nicht alle LCL/VCL Events basieren auf Messages, die du Abfangen kannst. Selbst wenn du viele davon abfangen kannst, musst du dann all das, was die LCL/VCL sonst für dich macht, selbst erledigen (die Parameter - grad bei den Drag&Drop Events - kommen ja nicht aus dem Nirgendwo). Je nachdem, um welche Events es genau geht, könnte es klappen, damit das Vorhaben zu realisieren ... einfach einfacher als einfach mal alle Events zuzuweisen wird es wohl nicht :D

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Typparameter in einen String

Beitrag von pluto »

Nicht alle LCL/VCL Events basieren auf Messages, die du Abfangen kannst.
Mit den Botschaften wird es Komplizierter. Aber unter dem Strich dürften die Meisten Events als Botschaften ankommen, die dann aufgearbeitet werden. Es gibt auch Botschaften für das "Drag&Drop".

Vielleicht würde es mit der RTTI doch einfacher gehen, ist dann die Anwendungs Größe, natürlich größer(oder hat das keinen Einfluss darauf ?).
MFG
Michael Springwald

Antworten