Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Propertys einer Componente für eine Klasse mittels RTTI (https://www.delphipraxis.net/131563-propertys-einer-componente-fuer-eine-klasse-mittels-rtti.html)

oki 27. Mär 2009 06:58

Re: Propertys einer Componente für eine Klasse mittels RTTI
 
Moin himitsu,

mit dem Lesen der Propertys hatte ich kein Problem. Es ging wirklich nur um den Fall, dass ich nicht alle Propertys der Klasse haben wollte, sondern nur die einer ausgewählten Vorfahrenklasse.

GetClass findet nur registrierte Klassen. Erstellst du eine eigene Klasse, auch als Nachfahre einer registrierten, so muss diese mit RegisterClass registriert werden. Dann findet GetClass diese auch.

Gruß oki

himitsu 27. Mär 2009 09:06

Re: Propertys einer Componente für eine Klasse mittels RTTI
 
TPropInfo enhält zumindestens keine Info, wozu es gehört.
Man könnte hier höchstens nachsehn an welcher Stelle es liegt (wohin der jeweilige Pointer in PPropList zeigt), aber ich glaub es wäre keine ganz sichere Methode, anhand deren Position diese zuordnen zu wollen,
obwohl ja die List der Methoden der Klasse zusammenstehen sollten, in der jeweiligen Klassendefinition.

Nja, so läuft es doch auch.
(PS: ich Idiot hatte beim Testen TForm1 verwendet und mich gewundert, daß dort die Ergebnisliste leer war :nerd: )

Achso :oops: ... dachte irgendwie, der findet alle Persistent-Klassen (TPersistent und Nachfahre)

oki 27. Mär 2009 09:25

Re: Propertys einer Componente für eine Klasse mittels RTTI
 
Zitat:

(PS: ich Idiot hatte beim Testen TForm1 verwendet und mich gewundert, daß dort die Ergebnisliste leer war Nerd )

Achso Embarassed ... dachte irgendwie, der findet alle Persistent-Klassen (TPersistent und Nachfahre)
Joop, den hab ich auch schon hinter mir. Willkommen im Club :mrgreen:

Gruß oki

himitsu 27. Mär 2009 13:43

Re: Propertys einer Componente für eine Klasse mittels RTTI
 
hab grad dort drüben noch was Nettes gefunden...

jetzt ist der Code etwas kürzer und übersichtlicher:
Delphi-Quellcode:
Uses Types, TypInfo;

Function GetClassPropList(C: TClass): TStringDynArray;
  Var L:      PPropList;
    i, i2, i3: Integer;

  Begin
    Result := nil;
    If not Assigned(C) Then Exit;
    L := nil;
    i := 0;
    Try
      i := GetPropList(C.ClassInfo, L);
      C := C.ClassParent;
      For i2 := i - 1 downto 0 do
        If IsPublishedProp(C, L[i2].Name) Then L[i2] := nil;
      i3 := 0;
      For i2 := i - 1 downto 0 do
        If Assigned(L[i2]) Then Inc(i3);
      SetLength(Result, i3);
      For i2 := i - 1 downto 0 do
        If Assigned(L[i2]) Then Begin
          Dec(i3);
          Result[i3] := L[i2].Name;
        End;
    Finally
      If Assigned(L) Then FreeMem(L);
    End;
  End;
und noch eine ganz Kurze/Übersichtliche ohne vorreservieren des Arrays:
Delphi-Quellcode:
Function GetClassPropList(C: TClass): TStringDynArray;
  Var L:      PPropList;
    i, i2, i3: Integer;

  Begin
    Result := nil;
    If not Assigned(C) Then Exit;
    L := nil;
    Try
      i := GetPropList(C.ClassInfo, L);
      For i2 := 0 to i - 1 do
        If not IsPublishedProp(C.ClassParent, L[i2].Name) Then Begin
          i3 := Length(Result);
          SetLength(Result, i3 + 1);
          Result[i3] := L[i2].Name;
        End;
    Finally
      If Assigned(L) Then FreeMem(L);
    End;
  End;


Aber ohne nachzusehn, würd ich einfach mal behaupten, die alte/allererste Funktion ist dagegen immerhin schneller :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz