procedure GetPropertyList(Obj: TObject; Filter: TTypeKinds; List: TStringList; Counter: integer);
var
Names, Value, Tipo: string;
PInfo: PPropInfo;
PropList: PPropList;
Count, i, j: integer;
Ob: TObject;
begin
Count := GetPropList(Obj.ClassInfo, Filter, nil);
GetMem(PropList, Count * SizeOf(PPropInfo));
GetPropList(Obj.ClassInfo, Filter, PropList);
for i := 0 to Count -1 do
begin
Value := GetPropValue(Obj, Proplist[i].Name);
PInfo := GetPropInfo(Obj, Proplist[i].Name);
Names := UpperCase(Proplist[i].Name);
if PInfo <> nil then
begin
case PInfo^.PropType^.Kind of
tkUnknown: Tipo := 'Unknown';
tkInteger: Tipo := 'Integer';
tkChar: Tipo := 'Char';
tkEnumeration: Tipo := 'Enumeration';
tkFloat: Tipo := 'Float';
tkString: Tipo := 'String';
tkSet: Tipo := 'Set';
tkClass: Tipo := 'Class';
tkMethod: Tipo := 'Method';
tkWChar: Tipo := 'WChar';
tkLString: Tipo := 'LString';
tkWString: Tipo := 'WString';
tkVariant: Tipo := 'Variant';
tkArray: Tipo := 'Array';
tkRecord: Tipo := 'Record';
tkInterface: Tipo := 'Interface';
tkInt64: Tipo := 'Int64';
tkDynArray: Tipo := 'DynArray';
end;
end;
if Tipo = 'Class' then
begin
List.Add('<' + Names + '>');
Ob := GetObjectProp(Obj, Proplist[i].Name);
GetPropertyList(Ob, tkProperties, List, Counter + 1);
List.Add('< /' + Names + '>');
end
else
begin
List.Add('<' + Names + '>' + Value + '< /' + Names + '>');
end;
end;
end;