我知道很久以前我就能做到这一点,所以一定有可能。
我想将一个项目(例如组件的align属性alNone)转换为我可以保存,显示的字符串等等。我知道我可以得到字节值并得出我自己的文字,但我确信有更直接的方法。
例如我想......
var S:string;
S:= somehow(Form.Align);
ShowMessage(S);
其中"某种程度上"但是,我将表单'的对齐属性的设置转换为字符串,例如" alNone'。
答案 0 :(得分:13)
您可以使用RTTI执行此操作:
uses
RTTI;
procedure TForm40.FormCreate(Sender: TObject);
var
sAlign: string;
eAlign: TAlign;
begin
//Enum to string
sAlign := TRttiEnumerationType.GetName(Align);
//string to enum
eAlign := TRttiEnumerationType.GetValue<TAlign>(sAlign);
end;
答案 1 :(得分:10)
Form.Align
不是TPersistent
的值。它是TAlign
的值,它是枚举类型。
您可以使用以下代码将枚举值转换为字符串:
type TEnumConverter = class
public
class function EnumToInt<T>(const EnumValue: T): Integer;
class function EnumToString<T>(EnumValue: T): string;
end;
class function TEnumConverter.EnumToInt<T>(const EnumValue: T): Integer;
begin
Result := 0;
Move(EnumValue, Result, sizeOf(EnumValue));
end;
class function TEnumConverter.EnumToString<T>(EnumValue: T): string;
begin
Result := GetEnumName(TypeInfo(T), EnumToInt(EnumValue));
end;
您需要在使用中添加System.TypInfo
。
执行此操作以将Form.Align
作为字符串:
S := TEnumConverter.EnumToString(Form.Align)