Necesitas una clase que te convierta enumerados en strings y viceversa. Utilizando RTTI puedes hacerlo sin problemas.
Yo en mi caso utilizo esta:
Código Delphi
[-] TEnumConverter = class
public
class function EnumToInt(const EnumValue: T): Integer;
class function EnumToString(EnumValue: T): string;
class procedure StringToEnum(strValue:String; var enValue:T);
end;
Y la Implementacion:
Código Delphi
[-]
class function TEnumConverter.EnumToInt(const EnumValue: T): Integer;
begin
Result := 0;
Move(EnumValue, Result, SizeOf(EnumValue));
end;
class function TEnumConverter.EnumToString(EnumValue: T): string;
begin
Result := GetEnumName(TypeInfo(T), EnumToInt(EnumValue));
end;
class procedure TEnumConverter.StringToEnum(strValue: String; var enValue:T);
var
Tipo: PTypeInfo;
Temp:Integer;
PTemp: pointer;
begin
Tipo := TypeInfo(T);
Temp := GetEnumValue(Tipo, strValue);
PTemp := @Temp;
enValue := T(PTemp^);
end;
Añade las units: System.Rtti, System.TypInfo
Y la forma de utilizarlo sería algo así:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
alineacion:TAlign;
i:Integer;
str:string;
begin
alineacion := TAlign.alBottom;
ShowMessage('Alineacion como cadena: ' + TEnumConverter.EnumToString(TAlign(alineacion)));
i := TEnumConverter.EnumToInt(TAlign(alineacion));
ShowMessage('Alineacion como entero: ' + IntToStr(i));
str := 'alRight';
TEnumConverter.StringToEnum(str, alineacion);
Button1.Align := alineacion;
end;