Reputation: 4353
In Delphi 2007, I added a new string type to my project:
type
String40 = string;
This property is used in a class:
type
TPerson = class
private
FFirstName = String40;
published
FirstName: string40 read FFirstName write FFirstName;
end;
During runtime, I want to get the name of the property FirstName by using RTTI. I expect it to be String40:
var
MyPropInfo: TPropInfo;
PropTypeName: string;
MyPerson: TPerson;
begin
MyPerson := TPerson.Create;
MyPropInfo := GetPropInfo(MyPerson, 'FirstName')^;
PropTypeName := MyPropInfo.PropType^.Name;
However, in this example PropTypeName is 'string'. What do I need to do get the correct property type name, 'String40'?
Upvotes: 3
Views: 7321
Reputation: 58431
This works in Delphi5
type
String40 = type string;
As for the rest of your code, to have RTTI available you should
Edit: what happens if you compile and run this piece of code?
program Project1;
uses
Classes,
typInfo,
Dialogs,
Forms;
{$R *.RES}
type
String40 = type string;
TPerson = class(TPersistent)
private
FFirstName: String40;
published
property FirstName: string40 read FFirstName write FFirstName;
end;
var
MyPropInfo: TPropInfo;
PropTypeName: string;
MyPerson: TPerson;
begin
Application.Initialize;
MyPerson := TPerson.Create;
MyPropInfo := GetPropInfo(MyPerson, 'FirstName')^;
PropTypeName := MyPropInfo.PropType^.Name;
ShowMessage(PropTypeName);
end.
Upvotes: 11
Reputation: 53366
You need to do two things:
You then get:
type
String40 = type string;
TPerson = class
private
FFirstName : String40;
published
property FirstName: string40 read FFirstName write FFirstName;
end;
var
MyPropInfo: PPropInfo;
PropTypeName: string;
MyPerson: TPerson;
begin
MyPerson := TPerson.Create;
try
MyPerson.FirstName := 'My first name';
MyPropInfo := GetPropInfo(MyPerson, 'FirstName');
if MyPropInfo<>nil then begin
PropTypeName := MyPropInfo^.PropType^.Name;
Memo1.Lines.Add(PropTypeName);
end;
finally
MyPerson.FRee;
end;
end;
Tested in D2009.
Upvotes: 4