在 Delphi 2007 中,我向我的项目添加了新的字符串类型:
type
String40 = string;
该属性在类中使用:
type
TPerson = class
private
FFirstName = String40;
published
FirstName: string40 read FFirstName write FFirstName;
end;
在运行时,我想使用 RTTI 获取属性 FirstName 的名称。我希望它是 String40:
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.
关于delphi - 如何获取自定义属性的属性类型名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777125/