Entwickler-Ecke
Sonstiges (Delphi) - [RTTI] GetPropInfo funktioniert nicht immer
HelgeLange - Do 26.11.09 17:02
Titel: [RTTI] GetPropInfo funktioniert nicht immer
Also ich habe mal wieder ein kleines Problem, diesmal mit der RTTI.
Ich will nach bestimmten Properties schauen, deren Namen aus einem Array kommen. Auf dem Formular habe ich bisher nur Standart-Delphi-Komponenten (die Idee ist, auch 3rd-party-Komponenten zu uterstützen, ohne diese zu kennen)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| const MAX_PROPERTIES = 4; AProperties : Array [1..MAX_PROPERTIES] Of String = ( 'Caption', 'Hint', 'Picture', 'Glyph' );
var PropInfo: PPropInfo; i : Integer; begin Label3.Caption := aComp.ClassName; For i := 1 to MAX_PROPERTIES Do begin PropInfo := GetPropInfo(aComp.ClassInfo, AProperties[i], tkProperties); If Assigned(PropInfo) Then StringGrid1.Cells[0,i] := AProperties[i]; end; |
Nun kommen solche Ziken wie TEdit hat kein Hint, ListBox auch nicht. Picture und Glyph findet er generell nicht.
Hat einer ne Idee ?
Update : Das scheint nur in design-time ein problem zu sein, wenn ich das ganze in ein Programm einbaue udn starte, krieg ich alle von mir gewünschten Properties.
BenBE - Fr 27.11.09 08:42
Ich weiß auch nicht, was Borland Inprise Embarcadero da geritten hat, als sie die RTTI entworfen haben. Erstens unvollständig (keine Records, keine Pointer, keine Interfaces, Funktions- und Methoden-Deklarationen nur, wenn die Parameter darstellbar sind; dann aber trotzdem keine Aufrufkonvention, ...). Ich hab mal versucht, in Delphi mir ne eigene, möglichst zu Borland Inprise Embarcadero kompatible Version zu bauen, die auch Pointer, Records usw. konnte. Das scheiterte dann aber am Compiler, weil ich in Konstanten Pointer auf diese Konstante nicht initialisieren konnte (obwohl er konstant gewesen wäre ...
Ansonsten zwecks Hint bitte ggf. nen Blick in die JVCL werfen, die haben da mit TJvFormStorage oder wie das Teil hieß glaube sowas, wie du's haben willst. Auch mit nem Design-Time-Experten dazu.
Martok - Fr 27.11.09 15:56
HelgeLange hat folgendes geschrieben : |
| Nun kommen solche Ziken wie TEdit hat kein Hint, ListBox auch nicht. Picture und Glyph findet er generell nicht. |
Spontan würde ich mal tippen, dass das alles Properties sind die einen Editor haben, kann das sein?
HelgeLange - Fr 27.11.09 16:33
Martok hat folgendes geschrieben : |
HelgeLange hat folgendes geschrieben : | | Nun kommen solche Ziken wie TEdit hat kein Hint, ListBox auch nicht. Picture und Glyph findet er generell nicht. |
Spontan würde ich mal tippen, dass das alles Properties sind die einen Editor haben, kann das sein? |
Hint property hat keinen Property Editor und auch keine Get/Set-Methode :
Delphi-Quelltext
1:
| property Hint: string read FHint write FHint stored IsHintStored; |
Die Property ist als published deklariert in TControl und dieses leitet sich schon direkt von TComponent ab.
Martok - Fr 27.11.09 19:31
HelgeLange hat folgendes geschrieben : |
| Hint property hat keinen Property Editor[...] |
Bei mir haben die Editoren, wird IIRC von den Jedis oder GExperts installiert. Daher meine Vermutung.
Hast du da mal ein kleines Test-Programm? Ich würde mir das gern mal ansehen.
Der Tipp mit dem FormStorage ist gar nicht mal so schlecht, das gabs auch schon von der RxLib, und da konnte ich grade verifizieren dass es gehen müsste. Dabei machen die da gar keine seltsamen Hacks, sollte eigentlich auch dein Code gehen...
HelgeLange - Fr 27.11.09 20:50
Naja, gibt kein Beispielprogramm direkt, da man das entweder in einen vorhandenen Komponenteneditor reinlegt oder in eine form selber und dann einfach mal laufen lässt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!