Dynamischer Zugriff auf Properties die nicht published sind

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Dynamischer Zugriff auf Properties die nicht published sind

Beitrag von soerensen3 »

Ich arbeite zurzeit an einem Editor für meine Spieleengine und habe folgendes Problem.
Ich verwende das TIPropertyGrid und dort werden natürlich nur published properties angezeigt. Bestimmte Eigenschaften lassen sich aber nicht als published deklarieren wie beispielsweise Objekte (nicht Klassen) und Array Properties.

Ein stark vereinfachtes Beispiel. Der Originalvektor hat auch Methoden.

Code: Alles auswählen

 
type
   TVec3 = object
      private
         [...]
      published
        property x: Single read FX write FX;
        property y: Single read FY write FY;
        property z: Single read FZ write FZ;
   end;
 
   TTestObject = class
      private
         [...]
      public
         property Position: TVec3 read FPosition write FPosition;  //
         property Children [ Index: Integer ]: TTestObject read GetChildren write SetChildren;  //Die Objekte sollen als Unterobjekte angezeigt werden.
      published
         property Count: Integer read GetCount write SetCount;
   end;
 


Ziel ist es Objekte und ArrayProperties ähnlich wie in Blender im Outliner in der Datablockansicht anzuzeigen.
blender.png


  • Gibt es eine Möglichkeit im TIPropertyGrid (eventuell über TPropertyEditor) zusätzliche Einträge anzuzeigen, die eigentlich nicht über die RTTI zugänglich sind?
  • Gibt es eine ein Tutorial um die RTTI selber auszulesen um einen eigenen Objektinspektor zu schreiben?
  • Gibt es irgendwo eine Erklärung zu den in TypInfo deklarierten Typen wie TPropInfo und wie diese organisiert sind?
  • Ungerne würde ich die Objekte zu Klassen machen oder einem Array, da der Editor nur zweitrangig ist und Klassen für z.B. Vektoren eher unpraktisch sind.

Antworten