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

M61*_*610 14 delphi string enumeration

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

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

比如我想......

var S:string;
S:= somehow(Form.Align);
ShowMessage(S);
Run Code Online (Sandbox Code Playgroud)

然而,在某种程度上,我将表单的align属性的设置转换为字符串,例如"alNone".

Jen*_*olt 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;
Run Code Online (Sandbox Code Playgroud)


Wos*_*osi 11

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;
Run Code Online (Sandbox Code Playgroud)

您需要添加System.TypInfo用途.

这样做得到Form.Align字符串:

S := TEnumConverter.EnumToString(Form.Align)
Run Code Online (Sandbox Code Playgroud)