Autor |
Beitrag |
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mo 20.04.09 19:24
Hallo zusammen!
Ich bin auf der Suche nach einer Komponente die den Delphi-Objektinspektor zur Laufzeit funktionsfähig nachbildet.
Klar würde man sagen: guck doch bei den Jedis - doch so weit ich sehe kann der JvInspector immer nur ein Objekt gleichzeitig inspecten (oder man hat die Einträge doppelt, einmal für jedes Objekt - ganz große Klasse), ich bräuchte aber eine Liste von Objekten und der stellt mir dann nur die Eigenschaften dar, die all diese Komponenten gemeinsam haben.
Meine Objekte stammen dabei nicht von TControl oder sowas ab, haben aber eine gemeinsame Basisklasse.
Kennt da jemand eine gute Komponente?
mfg
Jakob
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Zuletzt bearbeitet von jakobwenzel am Mo 20.04.09 19:56, insgesamt 1-mal bearbeitet
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mo 20.04.09 19:37
Deine Frage hört sich so an, alsob du deine anwendungseigenen Delphi-Objekte 'inspecten' willst, ist das richtig?
|
|
jakobwenzel 
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mo 20.04.09 19:56
Exakt das, das hab ich vielleicht im 1. Post nich genau genug geschrieben.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 21.04.09 13:20
Bei dem JvInspector gibt es auch so eine Art "Custom"-Modus, bei dem man eigene Einträge darstellen kann. Die Properties von den Objekten auszuwerten ist über die RTTI relativ einfach.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jakobwenzel 
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Di 21.04.09 18:15
Grade das hatte ich eigentlich nicht vor...
Ich mach bei dem Programm schon alles mögliche selber, wos Alternativen gäbe aber wenn man sich dann mal Arbeit abnehmen lassen will -.-
Aber ich schaus mir mal an 
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 21.04.09 19:52
Du kannst Dir die Arbeit dafür ja entsprechend in einer Ableitung der Komponente kapseln, dann zentralisiert sich genau die Arbeit ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jakobwenzel 
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Di 21.04.09 20:20
Es war ja sogar noch einfacher als ich dachte, vor allem war es weniger Schreibarbeit als erwartet
Fertig und funktioniert perfekt
Danke für den Hinweis dass es doch so einfach ist 
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 21.04.09 20:40
Kannst deine Lösung mal kurz skizzieren?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jakobwenzel 
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Di 21.04.09 20:51
Also, ich hab mir den Code von TJvInspectorPropData kopiert, mir nen neuen Namen ausgedacht und letztendlich alle Instance:TObject-Sachen durch Instances:TObjectList ersetzt. Beim Zusammensuchen der Properties muss man natürlich erstmal eine gemeinsame Elternklasse finden, für die man sich dann die PropInfos holt.
Beim auslesen ( GetAsXYZ) guck ich ob auch in allen Objekten das selbe steht und geb sonst 0 / nen Leerstring zurück. Was noch fehlt is ne optische Markierung von den Leerwerten, da hab ich noch nix außer so nem Ereignis in der Painter-Komponente gefunden (gut, ich hab auch noch nicht wirklich gesucht). Beim speichern ( SetAsXYZ) wird natürlich in allen Objekten gespeichert.
Füllen des Inspektors geht dann so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| list:=TObjectList.Create; list.add(edit1); list.add(button1); TJvInspectormultiPropData.New(jvinspector1.Root, list); list.OwnsObjects:=false; list.free; |
Was man dann noch machen kann ist vom Inspektor ne neue Klasse ableiten, die ne ObjectList als property hat und im OnChange von der Liste das ding neu füllt.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 21.04.09 20:55
In Delphi der Inspektor bietet IIRC auch von unterschiedlichen Komponenten gleichnamige Properties an, die in der Elternklasse nicht existierten ... vorausgesetzt, gleicher Datentyp ... Bin mir da aber nicht sicher ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jakobwenzel 
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Di 21.04.09 21:01
Jup, tut er, aber da ich den zusätzlichen Aufwand für meinen Anwendungszweck eh nicht brauch hab ichs gelassen
Man siehts auch schon bei meinem Beispiel: Font wird nicht angezeigt, aber im Delphi-Inspektor schon.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
aLeXanDer..
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 18.06.12 11:23
Wäre an einer detailierteren Lösung interessiert bzw. der Klasse JvInspectorMultiPropData.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 18.06.12 12:16
Ich habe es dann doch selbst gemacht, weil der JvInspector quälend langsam war und die Properties sich bei mir beim Ziehen einer Komponente oft aktualisieren. Da hat es dann nur noch gehakt.
Ein Beispiel für das Auflisten von RTTI-Daten findest du bei den Delphi Samples, bei Delphi XE z.B. hier:
Quelltext 1:
| Desktop\Bibliotheken\Dokumente\RAD Studio\8.0\Samples\Delphi\RTL\AttributesAndRTTI\rtti_browser | Im Grunde nimmst du einen TRttiContext, holst dir damit mit GetType die Typinformationen und dann davon mit GetProperties die Eigenschaften der Klasse. Bei jeder einzelnen TRttiProperty wiederum kannst du mit GetValue den Wert dieser Property bei einem konkreten Objekt abfragen.
|
|
aLeXanDer..
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 18.06.12 16:40
Hast du dann ein eigenes Objekt erstellt das dir aus einer ObjektListe nur die gemeinsamen Properties anzeigt und bei veränderung entsprechende Objekte updatet ?
Ist das RTTI in Delphi/C++ 2009 bereits implementierT?
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 18.06.12 17:20
Ja, genau, ich habe natürlich die Virtual TreeView benutzt und jeder Knoten ist ein eigenes Objekt. Die Zusammenfassung unterschiedlicher Werte bei mehreren markierten Objekten wird wiederum durch eine Zwischenschicht erledigt.
Ja, die RTTI gibt es auch da schon, aber ob das da genauso funktioniert kann ich dir leider nicht sagen.
|
|
|