私はずっと前にこれを行うことができたのを知っているので、それは可能でなければならない。
コンポーネントのalignプロパティalNoneなどのアイテムを、保存、表示など、何でもできる文字列に変換したいと思います。バイト値を取得して自分のテキストを作成できることはわかっていますが、もっと直接的な方法があると確信しています。
例えば私はしたい...
var S:string;
S:= somehow(Form.Align);
ShowMessage(S);
ただし、「なんとなく」は、フォームのalignプロパティの設定を「alNone」などの文字列に変換することです。
あなたは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;
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)