如何将枚举值转换为字符串?

时间:2015-10-30 20:17:46

标签: string delphi enumeration

我知道很久以前我就能做到这一点,所以一定有可能。

我想将一个项目(例如组件的align属性alNone)转换为我可以保存,显示的字符串等等。我知道我可以得到字节值并得出我自己的文字,但我确信有更直接的方法。

例如我想......

var S:string;
S:= somehow(Form.Align);
ShowMessage(S);

其中"某种程度上"但是,我将表单'的对齐属性的设置转换为字符串,例如" alNone'。

2 个答案:

答案 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)