123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- Program trtti1;
- {$Mode Delphi}
- {$M+}
- Uses
- Rttiobj,Typinfo;
- Procedure TestGetPropInfo (O : TMyTestObject);
- Const YesNo : Array[Boolean] of string[5] = (' NO ',' YES');
- Var
- PT : PTypeData;
- PI : PTypeInfo;
- I : Longint;
- PP : PPropList;
- begin
- PI:=O.ClassInfo;
- Writeln ('Type kind : ',TypeNames[PI^.Kind]);
- Writeln ('Type name : ',PI^.Name);
- PT:=GetTypeData(PI);
- If PT^.ParentInfo=Nil then
- Writeln ('Object has no parent info')
- else
- Writeln ('Object has parent info');
- Writeln ('Property Count : ',PT^.PropCount);
- Writeln ('Unit name : ',PT^.UnitName);
- GetMem (PP,PT^.PropCount*SizeOf(Pointer));
- GetPropInfos(PI,PP);
- For I:=0 to PT^.PropCount-1 do
- If PP^[i]<>Nil then
- With PP^[I]^ do
- begin
- Write('Property: ',Name:26,' (');
- Write(YesNo[GetPropInfo(PI,Name)=PP^[i]]);
- Write(YesNo[GetPropInfo(O,Name)=PP^[I]]);
- Write(YesNo[GetPropInfo(O.ClassType,Name)=PP^[I]]);
- Write(YesNo[GetPropInfo(PI,Name,tkProperties)=PP^[i]]);
- Write(YesNo[GetPropInfo(O,Name,tkProperties)=PP^[I]]);
- Write(YesNo[GetPropInfo(O.ClassType,Name,tkProperties)=PP^[I]]);
- Write(YesNo[FindPropInfo(O,Name)=PP^[I]]);
- Write(YesNo[FindPropInfo(O.ClassType,Name)=PP^[I]]);
- Writeln(')')
- end;
- end;
- Procedure TestGet (O : TMyTestObject);
- Var
- PT : PTypeData;
- PI : PTypeInfo;
- I,J : Longint;
- PP : PPropList;
- prI : PPropInfo;
- begin
- PI:=O.ClassInfo;
- Writeln ('Type kind : ',TypeNames[PI^.Kind]);
- Writeln ('Type name : ',PI^.Name);
- PT:=GetTypeData(PI);
- If PT^.ParentInfo=Nil then
- Writeln ('Object has no parent info')
- else
- Writeln ('Object has parent info');
- Writeln ('Property Count : ',PT^.PropCount);
- Writeln ('Unit name : ',PT^.UnitName);
- GetMem (PP,PT^.PropCount*SizeOf(Pointer));
- GetPropInfos(PI,PP);
- For I:=0 to PT^.PropCount-1 do
- begin
- pri:=PP^[i];
- With Pri^ do
- begin
- Write ('(Examining ',name,' : Type : ',TypeNames[PropType^.Kind],', ');
- If (Proptype^.kind in Ordinaltypes) Then
- begin
- J:=GetOrdProp(O,pri);
- Write ('Value : ',j);
- If PropType^.Kind=tkenumeration then
- Write ('(=',GetEnumName(Proptype,J),')')
- end
- else
- Case pri^.proptype^.kind of
- tkfloat : begin
- Write ('Value : ');
- Flush(output);
- Write(GetFloatProp(O,pri))
- end;
- tkAstring : begin
- Write ('value : ');
- flush (output);
- Write(GetStrProp(O,Pri));
- end;
- else
- Write ('Untested type:',ord(pri^.proptype^.kind));
- end;
- Writeln (')');
- end;
- end;
- end;
- Var O : TMyTestObject;
- begin
- O:=TMyTestObject.Create;
- TestGetPropInfo(O);
- // testget(o);
- end.
|