tw1331.pp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. program tw1331;
  2. {$mode objfpc}
  3. uses Classes, SysUtils, TypInfo, uw1331;
  4. type
  5. DummyEnum1 = (tr1,tr2);
  6. DummyEnum2 = tr1..tr2;
  7. DummyClass = class(TPersistent)
  8. private
  9. FMyDummyEnum1:DummyEnum1;
  10. FMyDummyEnum2:DummyEnum2;
  11. FMyDummyEnum3:DummyEnum3;
  12. FMyDummyEnum4:DummyEnum4;
  13. published
  14. property MyDummyEnum1:DummyEnum1 read FMyDummyEnum1 write FMyDummyEnum1;
  15. property MyDummyEnum2:DummyEnum2 read FMyDummyEnum2 write FMyDummyEnum2;
  16. property MyDummyEnum3:DummyEnum3 read FMyDummyEnum3 write FMyDummyEnum3;
  17. property MyDummyEnum4:DummyEnum4 read FMyDummyEnum4 write FMyDummyEnum4;
  18. end;
  19. var Dummy1:DummyClass;
  20. List:PPropList;
  21. Count,Index,I:integer;
  22. EnumType:PTypeInfo;
  23. begin
  24. // create a dummyclass instance
  25. Dummy1:=DummyClass.Create;
  26. // get property list
  27. Count:=GetTypeData(DummyClass.ClassInfo)^.Propcount;
  28. GetMem(List,Count * SizeOf(Pointer));
  29. GetPropInfos(DummyClass.ClassInfo,List);
  30. Index:=Count-1;
  31. while (Index>=0) do begin
  32. EnumType:=List^[Index]^.PropType;
  33. if EnumType^.Kind=tkEnumeration then begin
  34. // print all enumeration types
  35. writeln('PropertyName=',EnumType^.Name);
  36. with GetTypeData(EnumType)^ do
  37. // write all possible values for this type
  38. for I := MinValue to MaxValue do
  39. writeln(I,': ''',GetEnumName(EnumType, I),'''');
  40. end;
  41. dec(Index);
  42. end;
  43. FreeMem(List);
  44. Dummy1.Free;
  45. end.