Delphi 如何获取自定义属性的属性类型名称?
在Delphi 2007中,我在我的项目中添加了一个新的字符串类型:Delphi 如何获取自定义属性的属性类型名称?,delphi,rtti,Delphi,Rtti,在Delphi 2007中,我在我的项目中添加了一个新的字符串类型: type String40 = string; 此属性在类中使用: type TPerson = class private FFirstName = String40; published FirstName: string40 read FFirstName write FFirstName; end; 在运行时,我希望使用RTTI获取属性FirstName的名称。我希望是40: v
type
String40 = string;
此属性在类中使用:
type
TPerson = class
private
FFirstName = String40;
published
FirstName: string40 read FFirstName write FFirstName;
end;
在运行时,我希望使用RTTI获取属性FirstName的名称。我希望是40:
var
MyPropInfo: TPropInfo;
PropTypeName: string;
MyPerson: TPerson;
begin
MyPerson := TPerson.Create;
MyPropInfo := GetPropInfo(MyPerson, 'FirstName')^;
PropTypeName := MyPropInfo.PropType^.Name;
但是,在本例中,PropTypeName是“string”。要获得正确的属性类型名称“String40”,我需要做什么?这在Delphi5中有效
type
String40 = type string;
至于代码的其余部分,要使RTTI可用,您应该
- 从TPersistent继承TPerson或
- 对TPerson使用{$M+}编译器指令
- 发布Firstname属性
编辑:如果编译并运行这段代码会发生什么
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.
你需要做两件事:
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;
类型
String40=类型字符串;
TPerson=类
私有的
FFirstName:String40;
出版
属性名:string40读取FFirstName写入FFirstName;
结束;
变量
MyPropInfo:PPropInfo;
PropTypeName:字符串;
我的人:特珀森;
开始
MyPerson:=TPerson.Create;
尝试
MyPerson.FirstName:=“我的名字”;
MyPropInfo:=GetPropInfo(MyPerson,'FirstName');
如果是MyPropInfonil,则开始
PropTypeName:=MyPropInfo^.PropType^.Name;
备注1.行。添加(PropTypeName);
结束;
最后
MyPerson.FRee;
结束;
结束;
在D2009中测试。太糟糕了。。。这不能解决问题,是的!添加M+编译器指令为我修复了它。非常感谢。您的代码中有一些错误:=必须是:,缺少属性关键字。你确定你已经测试过了吗?