Zugriff auf Properties bei dyn. erzeugten Objekten

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Zugriff auf Properties bei dyn. erzeugten Objekten

Beitrag von piper62 »

Hallo,

in einer Anwendung generiere ich dyn. Objekte auf einem TPanel einer Form. Nun würde ich gerne auf die Eigenschaften zugreifen wobei nicht bekannt ist um welches Objekt es sich handelt. Momentan frage ich den Typ des Objektes ab, d.h. od es ein TPanel oder TDBEdit etc. ist. Dann setze ich nach entsprechender Fallunterscheidung die Properties.
Das gibt nur leider viel Code...

Weiss jemand aus dem Stehgreif wie ich auf die Property List eines Objektes zur Laufzeit zugreifen kann? Das muss ja gehen. Ich habe schon mal bei den JIT Definitionen reingeschaut aber hatte noch nicht die Zeit das zu vertiefen.
Ev. weiss ja jemand Rat.

Gruss,
Tibor

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

Beitrag von theo »

RTTI ist eine gute Sache, aber was hilft dir das abfragen der Property Liste in deinem Fall?
Du muss doch sowieso wissen, bei welchem Objekt du welche Properties bearbeiten willst.
Ich würde dann eher den Vererbungsbaum hochwandern.
Also z.B.
if Obj is TControl then
Eigenschaften von TControl bearbeiten (kann mehrere deiner Objekte betreffen)

if Obj is TPanel then
Spez. Eigenschaften von TPanel bearbeiten

if Obj is TDBEdit then
Spez. Eigenschaften von TDBEdit bearbeiten

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Beitrag von piper62 »

genau so mache ich es zur Zeit, nur würde ich gerne Code einsparen und das Ganze allgemein lösen.
D.h. über die Property List herausbekommen um welchen Typ von Objekt es sich handelt und dann auch entsprechend die Properties bearbeiten.
Es funktioniert natürlich so aber wie gesagt ich hätte es gern optimiert...

Gruss,
Tibor

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Es gibt einige Delphi Objektinspektor Komponenten, da hab ich mir das abgeschaut. Ob du damit Code sparst wage ich mal zu bezweifeln es sei denn du willst ne art Designer baun
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von theo »

piper62 hat geschrieben: D.h. über die Property List herausbekommen um welchen Typ von Objekt es sich handelt und dann auch entsprechend die Properties bearbeiten.
Es funktioniert natürlich so aber wie gesagt ich hätte es gern optimiert...
Ich versteh grad nicht, wie du das meinst. Kannst du mal ein Beispiel machen, wie das genau laufen soll?

Ich sehe das auch so wie Christian. Das ist gut für Property-Editoren, wo letztlich der User den Wert bestimmt, aber im Code selber kann ich da keinen Vorteil erkennen.
Es sei denn, du willst generell alle Integer Typen z.B. inkrementieren (Width, Tag etc..) was für mich aber auch keinen Sinn macht.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also verallgemeinern kannst dus auch mit dem Vorfahren Die meisten Komponenten sind von TCustomContzrol abgeleitet so kannst du mit TCustomControl(MeinControl).Height := 100; für fast jede Komponente die Höhe einstellen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten