Delphi 2010 RTTI:如何集成/浏览包含自定义属性的枚举

时间:2010-10-28 14:43:58

标签: delphi delphi-2010 rtti

我使用TCustomAttribute后代类(TEnumAttribute)创建了一个枚举,为每个枚举提供了额外的数据(如果成功,它将驱动一个可以查询枚举的自定义组件并相应地填充自己。)


type
  TShoppingCartType = (

    [TEnumAttribute(0, 'All')]
    sctAll,

    [TEnumAttribute(1, 'Web Shopping Cart')]
    sctWebShoppingCart,

    [TEnumAttribute(2, 'Wish List')]
    sctDefaultWebWishList,

    [TEnumAttribute(3, 'Custom')]
    sctWebCustomList

    );

我可以很好地获取名称和值(使用相应的TypeInfo GetEnum方法),但是如何访问枚举中的每个值并访问它的已定义属性?

感谢您提供任何信息

1 个答案:

答案 0 :(得分:3)

据我所知,您只能使用属性注释类型。由于枚举的值只是一个简单的序数值,因此您的方法可能不起作用。

如果枚举值是类型本身,您可以使用TRttiContextTRttiType,如官方文档中所述:

http://docwiki.embarcadero.com/RADStudio/XE/en/Extracting_Attributes_at_Run_Time

以经典的方式做事似乎更合适:

TShoppingCartTypeDescriptions = array[TShoppingCartType] of string;

...

Descriptions: TShoppingCartTypeDescriptions;
Descriptions[sctAll] := 'All';
Descriptions[sctWebShippingCart] := 'Web Shopping Cart';
// and so on

您可以使用以下方法枚举所有值:

var 
  I: TShoppingCartType;
begin

  for I := Low(TShoppingCartType) to High(TShoppingCartType) do
      // Do something with I

end;