Mit der Typinfo Einheit veröffentlicht wird, ist es einfach, Eigenschaften aufzuzählen, wie im folgenden Ausschnitt gesehen:die Klasse zu entdecken, wo ein Objekt zunächst mit mehreren Ebenen der Vererbung
procedure TYRPropertiesMap.InitFrom(AClass: TClass; InheritLevel: Integer = 0);
var
propInfo: PPropInfo;
propCount: Integer;
propList: PPropList;
propType: PPTypeInfo;
pm: TYRPropertyMap;
classInfo: TClassInfo;
ix: Integer;
begin
ClearMap;
propCount := GetPropList(PTypeInfo(AClass.ClassInfo), propList);
for ix := 0 to propCount - 1 do
begin
propInfo := propList^[ix];
propType := propInfo^.PropType;
if propType^.Kind = tkMethod then
Continue; // Skip methods
{ Need to get GetPropInheritenceIndex to work
if GetPropInheritenceIndex(propInfo) > InheritLevel then
Continue; // Dont include properties deeper than InheritLevel
}
pm := TYRPropertyMap.Create(propInfo.Name);
FList.Add(pm);
end;
end;
Aber was ich brauche, ist zu Figur aus der genauen Klasse, aus der jede Eigenschaft erbt. Zum Beispiel in TControl, die Tag-Eigenschaft kommt von TComponent, was ihm eine Vererbungstiefe von 1 gibt (0 ist eine Eigenschaft, die in TControl selbst deklariert wird, wie zum Beispiel Cursor).
Berechnung der Vererbung Tiefe ist einfach, wenn ich weiß, welche Klasse zuerst die Eigenschaft definiert. Für meine Zwecke ist, wo ein Objekt zuerst veröffentlicht Sichtbarkeit gewonnen hat, wo es zuerst erschien.
Ich benutze Delphi 2007. Bitte lassen Sie mich wissen, wenn mehr Details erforderlich sind. Alle Hilfe wird geschätzt.
Ah ... Ich verstehe. Hatte auf einen direkteren Weg gehofft (zum Beispiel mit der VMT herumspielen), aber das funktioniert definitiv. Zum Glück geht es mir im Moment nicht um Effizienz. Danke für die schnelle Antwort - deine Lösung ist definitiv außerhalb der * direct * Box, in der ich steckte. – Atorian