uses TypInfo, SysConst; var Alignment: TAlignment; Value: Integer; P: PTypeInfo; begin P := TypeInfo(TAlignment); Value := GetEnumValue(P,'taLeftJustify'); with GetTypeData(P)^ do begin if (Value < MinValue) or (Value > MaxValue) then begin raise ERangeError.CreateRes(@SRangeError); end; Alignment := TAlignment(Value); // Alignment <- taLeftJustify end; end; var AlignmentName: String; begin AlignmentName := GetEnumName(TypeInfo(TAlignment), Ord(taRightJustify)); // AlignmentName <- 'taRightJustify' end;2008/08/16追記: 該当する列挙子名が存在しないとGetEnumValueが-1を返す問題の対策を追加しました。 2012/05/08追記: 列挙型と列挙子名(文字列)の相互変換(ジェネリックス版)もどうぞ(Delphi 2009以降)。
2008年7月10日
列挙型と列挙子名(文字列)の相互変換
列挙型と列挙子名の文字列の相互変換にはTypInfoネームスペースのGetEnumName/GetEnumValueを使用します。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿