Оба приведенных вами примера являются поддиапазонами числовых значений.Как таковой RTTI действительно знает только базовое целое число.Другие примеры включают TCursor
, TFontCharset
и TTabOrder
.
Если у вас есть такой тип:
TEnum = (exOne,exTwo,exThree);
Вы можете использовать RTTI для получения и установки 'exOne'
,'exTwo'
и 'exThree'
как строки.
Это можно сделать с помощью этих методов в TypInfo.pas
function GetEnumName(TypeInfo: PTypeInfo; Value: Integer): string;
function GetEnumValue(TypeInfo: PTypeInfo; const Name: string): Integer;
Если вы хотите использовать константы, определенные для цветов, или ModalResultsвы должны построить свой выигранный словарь с постоянным именем в значение, которое затем сможете реализовать в своих собственных подпрограммах сериализации.
TColor реализует статический словарь под названием «Цвета», который можно использовать, если вы используете только 52 цвета, которые онподдерживает.
Colors: array[0..51] of TIdentMapEntry = (
(Value: clBlack; Name: 'clBlack'),
...
(Value: clWindowText; Name: 'clWindowText'));
Затем вы можете сделать следующее, чтобы получить имя цвета.
var
ColorName : String;
begin
// Color Value must be between 0 and 51 otherwise index out of bounds
ColorName := Colors[ColorValue];
end;
Затем вы можете перебрать элементы в массиве цветов, чтобы определить значение для данногоимя.