Delphi 2010 RTTI: как интегрировать / исследовать перечисление, содержащее пользовательский атрибут - PullRequest
1 голос
/ 28 октября 2010

Я создал перечисление с использованием класса-потомка TCustomAttribute (TEnumAttribute) для предоставления каждому перечислению дополнительных данных (в случае успеха он будет управлять пользовательским компонентом, который может опрашивать перечисление и заполнять себя соответствующим образом).

Я могу получить имена и значения просто отлично (используя соответствующие методы TypeInfo GetEnum), но как мне получить доступ к каждому значению в перечислении и получить доступ к его определенному атрибуту?

Спасибо за любую информацию

1 Ответ

3 голосов
/ 28 октября 2010

Насколько я вижу, вы можете только аннотировать типы с атрибутами. Поскольку значение перечисления является только простым порядковым значением, ваш подход, вероятно, не работает.

Если бы значения перечисления были самими типами, вы бы использовали TRttiContext и TRttiType, как описано в официальных документах:

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;
...