我无法根据名称而不是序数值获取枚举类型。我需要在类属性的 RTTI 循环内执行此操作。我尝试过使用 GetEnumName 和 TRTTIEnumerationType.GetName,但我似乎无法从 TRTTIProperty 实例将这些东西组合在一起。
请帮助?(下面的框架代码示例)
用途
RTTI、类型信息;
类型
TCustomColor = (ccBlack, ccBrown, ccBlue);
TMyClass = 类
民众
属性自定义颜色:TCustomColor;
结尾;
程序输出;
变量
rc:TRTTIContext;
rt : TRTTI 类型;
rp : TRTTI 属性;
mc : TMyClass;
开始
mc.CustomColor := ccBlue;
rt := rc.GetType(mc.ClassType);
对于 rt.GetProperties 中的 rp 做
如果 rp.PropertyType.TypeKind = tkEnumeration 那么
开始
// TODO: 从属性中检索“ccBlue”
结尾;
结尾;
程序输入;
变量
n、s:字符串;
o:T 对象;
rc:TRTTIContext;
rt : TRTTI 类型;
开始
n := '自定义颜色';
s := 'ccBlue';
// 注意:o 是从它的类类型的字符串实例化的
o := (rc.FindType('MyClass') as TRTTIInstanceType).MetaClassType.Create;
rt := rc.GetType(o.ClassType);
rt.GetProperty(n).SetValue(o, ???); // TODO:适当设置 o.CustomColor
结尾;
请注意,在较新版本的 Delphi 中,您可以执行以下操作:
S:=TRttiEnumerationType.GetName(o.CustomColor)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2836 次 |
| 最近记录: |