![]() |
Auflisten von Sub-Eigenschaften einer Komponente
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:
Er zeigt mir dann an: MyEigenschaft TMyEigenschaft aber eben nicht die Untereigenschaften.
TMyEigenschaft = Class(TPersistent)
private FEigenschaft1: boolean; FEigenschaft2: boolean; .... published property Eigenschaft1: boolean read FEigenschaft1 write FEigenschaft2; property Eigenschaft2: boolean read FEigenschaft2 write FEigenschaft2; .... Wie kann ich die (zusätzlich) auslesen und auflisten? |
AW: Auflisten von Sub-Eigenschaften einer Komponente
Zitat:
Indem du das Selbe nochmal mit MyEigenschaft machst, was du schon mit der übergeordneten Klasse gemacht hast? Wenn es ein Property ist und der Value davon ist eine Klasse (Objektzeiger), dann deine Funktion da auch nochmal drüber laufen lassen. |
AW: Auflisten von Sub-Eigenschaften einer Komponente
Sorry ich kapier das noch nicht richtig.
Die Komponente heisst konkret Elevator15. Der Befehl heisst dann...
Delphi-Quellcode:
funktioniert auch :procedure TF1.Button1Click(Sender: TObject); begin ListComponentProperties(Elevator15, ListBox1.Items); end; ein Ergebnis ist in der Liste SPS_Modbus_Adressen: TSPS_Modbus_Adressen - die Klasse mit den Untereigenschaften. wenn ich jetzt in den Befehl ListComponentProperties eingebe:
Delphi-Quellcode:
procedure TF1.Button1Click(Sender: TObject); begin ListComponentProperties(Elevator15.SPS_Modbus_Adressen), ListBox1.Items); //oder ListComponentProperties(SPS_Modbus_Adressen), ListBox1.Items); end; habe die Fehlermeldung: incompatible Typen TComponent und TSPS_Modbus_Adressen Wie stelle ich das genau an? |
AW: Auflisten von Sub-Eigenschaften einer Komponente
Delphi-Quellcode:
procedure ListComponentProperties(ATypeInfo: PTypeInfo; Strings: TStrings); overload;
var Count, I: Integer; List: PPropList; PropInfo: PPropInfo; PropOrEvent: string; begin List := nil; Count := GetPropList(ATypeInfo, List); try for I := 0 to Count - 1 do begin PropInfo := List^[I]; case PropInfo.PropType^.Kind of TTypeKind.tkMethod: PropOrEvent := 'Event'; TTypeKind.tkClass: begin ListComponentProperties(PropInfo.PropType^, Strings) end; else PropOrEvent := 'Property'; end; // PropValue := VarToStr(GetPropValue(Component, PropInfo^.Name)); <--- hier noch Gehirnschmalz reinstecken, da ja die Instanz fehlt Strings.Add('- - -' + Format('[%s] %s: %s = %s', [PropOrEvent, PropInfo^.Name, PropInfo^.PropType^.Name, ''])); end; finally FreeMem(List); end; end; procedure ListComponentProperties(Component: TObject; Strings: TStrings); overload; var Count, Size, I: Integer; List: PPropList; PropInfo: PPropInfo; PropOrEvent, PropValue: string; begin List := nil; Count := GetPropList(Component, List); try for I := 0 to Count - 1 do begin PropInfo := List^[I]; case PropInfo.PropType^.Kind of TTypeKind.tkMethod: PropOrEvent := 'Event'; TTypeKind.tkClass: begin ListComponentProperties(PropInfo.PropType^, Strings) end; else PropOrEvent := 'Property'; end; 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz