Значение переменной, имееющий тип enum можно получить в символьном виде с помощью функций GetEnumName и GetEnumValue (TypInfo.hpp). Для этого необходимо иметь Typinfo::PTypeInfo. Значение можно получить, если данный enum уже был задействован в опубликованных свойствах (published property) зарегистрированного VCL класса. Вот как, например, можно преобразовать переменную типа TWindowState в AnsiString и обратно.
| Код | #include <TypInfo.hpp>
TWindowState EnumValue = wsMinimized; AnsiString strEnumValue;
Typinfo::PTypeInfo pTypeInfo = *(Typinfo::GetPropInfo(__typeinfo(TForm),"WindowState"))->PropType; //переводим enum в символьный вид; strEnumValue = GetEnumName(pTypeInfo, EnumValue )); // сейчас strEnumValue содержит "wsMinimized" //а теперь обратно strEnumValue = "wsMaximized"; EnumValue = (TWindowState)GetEnumValue(pTypeInfo,strEnumValue);
|
В данном случае для получения необходимой информации воспользовались тем фактом, что данный тип уже был применен в TForm в опубликованном свойстве WindowState. Кстати, если попытаться воспользоваться TCustomForm будет сгенерировано исключение. Там тоже есть свойстdо WindowState, но оно не опубликовано. |