![]() |
Objekte zur Laufzeit inspizieren ( a la BlueJ )
Ich würde gerne eine Delphi-Umgebung in der Art von BlueJ entwickeln, in der zur Laufzeit interaktiv zu allen definierten (eigenen!) Klassen
- Objekte erzeugt werden können - deren Eigenschaften mit aktuellen Werten inspiziert werden können - deren Methoden gesehen und aktiviert werden können. Und das Ganze so, dass die selbst definierten Klassen keinen eigenen Verwaltungs-Overhead (kein spezialisiertes Create) benötigen. Geht so etwas in Delphi? Kann ich zur Laufzeit irgendwo eine Liste aller definierten (compilierten) Klassen finden? Hilfe wäre klasse...! |
Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )
Sicherlich gibt es sowas. Die IDE macht es ja genauso. Die einzige Hilfe die es bekommt ist die Register-Procedure in Packages. Das einige was nicht geht wird sein das du nicht so einfach Methoden aufrufen kannst, da diese nicht per RTTI bestimmbar sind.
Da sind wir beim Thema RTTI. Über RTTI (Runtime Type Information) kannst Du dir alle (published) Eigenschaften und Methoden (Normalerweise werden Methoden nicht published, aber das ![]() |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
In die Code-Library gehören nur fertige Code-Snippets. |
Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )
Danke, Bernhard!
Nur... die Sache ist nicht so leicht...! Die DUnit erscheint schrecklich kompliziert, bei JEDI hab ich nichts passendes gefunden, und ElPack kenn ich nicht. Vielleicht ein Beispiel für mein Anliegen: Ich hab eine Klasse definiert: TAuto = class(Tpersistent) private nr: string; private ps: integer; procedure fahre(s: real); procedure bremse(s: real); end; Würde dann gern ein Auto-Objekt erzeugen... var auto: TAuto; begin auto := TAuto.Create; ... und dann i r g e n d w i e (?) herausfinden/anzeigen können, welche Datenfelder und welche Methoden dieses Auto nun hat. Die Zeile: edit1.Text := inttostr(auto.getinterfacetable.EntryCount); wird zwar vom Compiler akzeptiert, liefert aber einen Laufzeitfehler (Zugriffsverletzung, Lesen von Adresse 0 ). Sonstige nützliche/informative Prozeduren oder Funktionen hab ich bislang nicht gefunden - bin ein wenig gefrustet... Gibt es bzw. hast Du hierfür Hilfe??? Und als weiteres Problem: Wie könnte ich eine Methode aufrufen, von der erst zur Laufzeit (!) bekannt ist, wie sie heisst, und zwar in Form einer String-Variable?? Z.B. hätte ich: objekt, methode: string; Wunsch: Ausführen per ...?(objekt). ...?(methode) Ist diese Sache prinzipiell unmöglich, weil Delphi eine Compilersprache ist und daher eine (dynamische) Interpretation von Befehlen nicht realisierbar ist??? Schöne Grüße math65 |
Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )
Zitat:
Zitat:
Zitat:
|
Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )
Willkommen in der Delphi PRAXiS, math65!
Einfach wird es bestimmt nicht, aber du kannst dich ja mal einlesen: ![]() ![]() ![]() ![]() ![]() ![]() Offenbar gibt es Möglichkeiten, getestet habe ich sie allerdings nicht. Gruß Hawkeye |
Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )
Die $METHODINFO und $TYPEINFO Compilerschalter sind mir neu. Aber gut zu wissen das es sowas auch für Win32 in Delphi gibt. Evtl. ergeben sich damit einige Möglichkeiten ...
|
Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )
evtl. nützt es dir etwas, wenn du dir den Quellcode vom DFMEdit anschaust, da ist ziemlich viel RTTI verbaut.
Jedoch gibt es imho keine Möglichkeit, die registrierten Klassen sinnvoll zu enumerieren. Die Objektliste wird beim DFMedit mithilfe einer INI-Datei erstellt. HTH Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz