我需要浏览一些类的所有已发布属性.未列出类型为具有固定值的枚举的属性.
见下面的例子:
TMyEnum = (meBlue, meRed, meGreen);
TMyEnumWithVals = (mevBlue=1, mevRed=2, mevGreen=3);
TMyClass =
...
published
property Color: TMyEnum read FColor write SetColor; // This one is found
property ColorVal: TMyEnumWithVals read FColorVal write SetColorVal; // This one is never found
end;
Run Code Online (Sandbox Code Playgroud)
我需要固定值,因为这些属性存储在数据库中,我需要确保分配的值始终是相同的,无论下一版本中的Delphi编译器选择如何,并防止在枚举列表中任何错误的未来值插入.
我尝试使用新的Delphi 2010 RTTI(带.GetDeclaredProperties)和"旧"RTTI(带GetPropInfos):除上述类型的属性外,找到所有属性.
在所有类中都可以看到相同的行为.我还在一个示例项目中复制了这个.
尝试使用和不使用各种RTTI指令而不进行更改.
这是一个错误,一个已知的限制?是否有解决方法(除了删除枚举的固定值)?
使用Delphi2010 Ent + Update5
[编辑]答案下面提供变通方法:枚举的第一个值必须被设置为0而不是1,和值是连续的.经过测试和工作的解决方案
谢谢,
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |