trtti5.pp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. {$IFDEF FPC}
  2. {$mode objfpc}{$H+}
  3. {$ELSE}
  4. {$APPTYPE CONSOLE}
  5. {$ENDIF}
  6. uses
  7. SysUtils,
  8. TypInfo,
  9. Classes;
  10. type
  11. TAObject = class(TPersistent)
  12. private
  13. FIntProp: Integer;
  14. published
  15. property IntProp: Integer read FIntProp write FIntProp;
  16. end;
  17. TBObject = class(TAObject)
  18. published
  19. property IntProp default 1;
  20. end;
  21. TCObject = class(TBObject)
  22. published
  23. property IntProp default 2;
  24. end;
  25. procedure ShowProperties;
  26. var
  27. Obj: TCObject;
  28. i: Longint;
  29. lPropFilter: TTypeKinds;
  30. lCount: Longint;
  31. lSize: Integer;
  32. lList: PPropList;
  33. begin
  34. Obj := TCObject.Create;
  35. lPropFilter := [tkInteger, tkLString {$ifdef FPC}, tkAString{$endif}];
  36. lCount := GetPropList(Obj.ClassInfo, lPropFilter, nil, false);
  37. lSize := lCount * SizeOf(Pointer);
  38. GetMem(lList, lSize);
  39. Writeln('Total property Count: ' + IntToStr(lCount));
  40. lCount := GetPropList(Obj.ClassInfo, lPropFilter, lList, false);
  41. for i := 0 to lCount-1 do
  42. begin
  43. Writeln('Property '+IntToStr(i+1)+': ' + lList^[i]^.Name);
  44. end;
  45. if lCount<>1 then
  46. halt(1);
  47. FreeMem(lList);
  48. Obj.Free;
  49. Writeln('---------------');
  50. end;
  51. begin
  52. ShowProperties;
  53. end.