Ver Mensaje Individual
  #2  
Antiguo 17-10-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.439
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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 [-]
  // classHelper para conversiones
  TEnumConverter = class
  public
    // Enumerado a entero
    class function EnumToInt(const EnumValue: T): Integer;
    // enumerado a string
    class function EnumToString(EnumValue: T): string;
    // class function StringToEnum(AValor:string):T;
    class procedure StringToEnum(strValue:String; var enValue:T);
  end;

Y la Implementacion:

Código Delphi [-]
//  obtener string como int (enum de un tipo)
class function TEnumConverter.EnumToInt(const EnumValue: T): Integer;
begin
  Result := 0;
  Move(EnumValue, Result, SizeOf(EnumValue));
end;

// Obtener enum como string
class function TEnumConverter.EnumToString(EnumValue: T): string;
begin
  Result := GetEnumName(TypeInfo(T), EnumToInt(EnumValue));
end;

// class function StringToEnum(AValor:string):T;
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
  // enum a Cadena
  alineacion := TAlign.alBottom;
  ShowMessage('Alineacion como cadena: ' + TEnumConverter.EnumToString(TAlign(alineacion)));
  // enum a Integer
  i := TEnumConverter.EnumToInt(TAlign(alineacion));
  ShowMessage('Alineacion como entero: ' + IntToStr(i));
  // Cadena a enum
  str := 'alRight';
  TEnumConverter.StringToEnum(str, alineacion);
  Button1.Align := alineacion;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 17-10-2019 a las 10:09:06.
Responder Con Cita