私はずっと前にこれを行うことができたことを知っていますので、可能でなければなりません。列挙型の値を文字列に変換する方法は?
コンポーネントのalignプロパティalNoneなどのアイテムを保存して表示できる文字列に変換したいと思います。私はバイト値を得ることができ、私自身のテキストを思いつくことができると知っていますが、より直接的な方法があると確信しています。 「何とか」しかし、それは私が、このような「alNone」などの文字列に、フォームのalignプロパティの設定に変換されている。
私はずっと前にこれを行うことができたことを知っていますので、可能でなければなりません。列挙型の値を文字列に変換する方法は?
コンポーネントのalignプロパティalNoneなどのアイテムを保存して表示できる文字列に変換したいと思います。私はバイト値を得ることができ、私自身のテキストを思いつくことができると知っていますが、より直接的な方法があると確信しています。 「何とか」しかし、それは私が、このような「alNone」などの文字列に、フォームのalignプロパティの設定に変換されている。
Form.Align
例えば
私がしたい...
var S:string;
S:= somehow(Form.Align);
ShowMessage(S);
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)
自然なフォローアップの質問は、文字列を列挙型の値に戻す方法です。 TEnumConverterにもそれを含めることができます。 –
これはD2009以上でのみ動作します。 D2007以下では、適切なtypeinfo(TEnumtype)を使ってTypInfo.GetEnumName()を呼び出す必要があります。 –
これは* @ *コードが既に@Ritsaertのコードです。 Genericsは単に便利なラッパーを提供します。答えの要点は、あなたのバージョンのDelphiで許される方法であれば、 'GetEnumName'を呼び出すことです。 –
あなたは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;
あるいは単にを、あなたのケース 'sの中:= TRttiEnumerationType.GetName(Form.Align ) ' –
Graymatter
@Graymatterはいそれは同じ質問ですが、答えが間違っているのは、ホイールを再発明することです。 –
@Graymatter彼はまさに私の答えです。誰か好きではない –