|
@@ -1,59 +1,67 @@
|
|
|
-{$mode objfpc}{$H+}
|
|
|
+{$IFDEF FPC}
|
|
|
+ {$mode objfpc}{$H+}
|
|
|
+{$ELSE}
|
|
|
+ {$APPTYPE CONSOLE}
|
|
|
+{$ENDIF}
|
|
|
|
|
|
uses
|
|
|
- Classes, SysUtils, TypInfo;
|
|
|
-
|
|
|
+ SysUtils,
|
|
|
+ TypInfo,
|
|
|
+ Classes;
|
|
|
|
|
|
type
|
|
|
-{$M+}
|
|
|
- TMyTestObject = class;
|
|
|
-{$M-}
|
|
|
-
|
|
|
+ TAObject = class(TPersistent)
|
|
|
+ private
|
|
|
+ FCaption: string;
|
|
|
+ published
|
|
|
+ property Caption: string read FCaption write FCaption;
|
|
|
+ end;
|
|
|
|
|
|
- TSomeOtherClass = class(TObject)
|
|
|
+ TBObject = class(TAObject)
|
|
|
private
|
|
|
- FName: string;
|
|
|
- public
|
|
|
- property Name: string read FName write FName;
|
|
|
+ FIntProp: Integer;
|
|
|
+ FStrProp: String;
|
|
|
+ published
|
|
|
+ property IntProp: Integer read FIntProp write FIntProp;
|
|
|
+ property StrProp: String read FStrProp write FStrProp;
|
|
|
end;
|
|
|
|
|
|
|
|
|
- TMyTestObject = class(TObject)
|
|
|
+ TCObject = class(TBObject)
|
|
|
private
|
|
|
- FIntProp: integer;
|
|
|
- FStringProp: string;
|
|
|
- public
|
|
|
+ FAStrProp: String;
|
|
|
published
|
|
|
- property StringProp: string read FStringProp write FStringProp;
|
|
|
- property IntProp: integer read FIntProp write FIntProp;
|
|
|
+ property AnotherStrProp: String read FAStrProp write FAStrProp;
|
|
|
end;
|
|
|
|
|
|
-
|
|
|
procedure ShowProperties;
|
|
|
var
|
|
|
- O: TMyTestObject;
|
|
|
+ Obj: TCObject;
|
|
|
i: Longint;
|
|
|
lPropFilter: TTypeKinds;
|
|
|
lCount: Longint;
|
|
|
lSize: Integer;
|
|
|
lList: PPropList;
|
|
|
begin
|
|
|
- O := TMyTestObject.Create;
|
|
|
- lPropFilter := [tkInteger, tkAString];
|
|
|
+ Obj := TCObject.Create;
|
|
|
+ lPropFilter := [tkInteger, tkLString {$ifdef FPC}, tkAString{$endif}];
|
|
|
|
|
|
- lCount := GetPropList(O.ClassInfo, lPropFilter, nil, false);
|
|
|
+ lCount := GetPropList(Obj.ClassInfo, lPropFilter, nil, false);
|
|
|
lSize := lCount * SizeOf(Pointer);
|
|
|
GetMem(lList, lSize);
|
|
|
|
|
|
Writeln('Total property Count: ' + IntToStr(lCount));
|
|
|
- lCount := GetPropList(O.ClassInfo, lPropFilter, lList, false);
|
|
|
+ lCount := GetPropList(Obj.ClassInfo, lPropFilter, lList, false);
|
|
|
for i := 0 to lCount-1 do
|
|
|
begin
|
|
|
Writeln('Property '+IntToStr(i+1)+': ' + lList^[i]^.Name);
|
|
|
end;
|
|
|
|
|
|
+ if (lList^[0]^.Name<>'Caption') then
|
|
|
+ halt(1);
|
|
|
+
|
|
|
FreeMem(lList);
|
|
|
- O.Free;
|
|
|
+ Obj.Free;
|
|
|
Writeln('---------------');
|
|
|
end;
|
|
|
|