Einzelnen Beitrag anzeigen

josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#1

Auflisten von Sub-Eigenschaften einer Komponente

  Alt 31. Aug 2017, 07:24
Ich möchte mir wegen Mapping von Eigenschaften die Eigenschaften
einer Komponente anzeigen lassen.

Dazu habe ich diesen Codeschnipsel gefunden, der auch funktioniert.

Allederdings werden da nur die Haupt-Eigenschaften aufgelistet. Ich möchte
nun aber von einer bestimmten Eigenschaft, die Unter-Eigenschaften
auflisten lassen, die in einer Klasse deklariert sind.



Delphi-Quellcode:
procedure TF1.ListComponentProperties(Component: TComponent; Strings: TStrings);
var
  Count, Size, I: Integer;
  List: PPropList;
  PropInfo: PPropInfo;
  PropOrEvent, PropValue: string;
begin
  Count := GetPropList(Component.ClassInfo, tkAny, nil);
  Size := Count * SizeOf(Pointer);
  GetMem(List, Size);
  try
    Count := GetPropList(Component.ClassInfo, tkAny, List);
    for I := 0 to Count - 1 do
    begin
      PropInfo := List^[I];
      if PropInfo^.PropType^.Kind in tkMethods then
        PropOrEvent := 'Event'
      else
        PropOrEvent := 'Property';
      PropValue := VarToStr(GetPropValue(Component, PropInfo^.Name));
      Strings.Add(Format('[%s] %s: %s = %s', [PropOrEvent, PropInfo^.Name,
        PropInfo^.PropType^.Name, PropValue]));
    end;
  finally
    FreeMem(List);
  end;
end;

// Example: List all Properties/Events from Button1 in a TListBox

procedure TF1.Button1Click(Sender: TObject);
begin
  ListComponentProperties(Button1, ListBox1.Items);
end;

So habe ich z.B. in einer Komponente eine Klasse deklariert

Delphi-Quellcode:
TMyEigenschaft = Class(TPersistent)
    private
    FEigenschaft1: boolean;
    FEigenschaft2: boolean;
    ....

 published
    property Eigenschaft1: boolean read FEigenschaft1 write FEigenschaft2;
    property Eigenschaft2: boolean read FEigenschaft2 write FEigenschaft2;
    ....
Er zeigt mir dann an: MyEigenschaft TMyEigenschaft aber eben nicht die Untereigenschaften.

Wie kann ich die (zusätzlich) auslesen und auflisten?

Geändert von josef-b (31. Aug 2017 um 08:29 Uhr)
  Mit Zitat antworten Zitat