注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

delphi 枚举类型与字符串的转换  

2012-11-07 09:52:20|  分类: delphi xe2 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
delphi中如何把枚举类型作为string显示

1:RTTI。

好像是GetXXXXName什么的。中间的XXXX是枚举那个单词。

2:uses typinfo;
偶写的2个函数 字符和枚举互转
Type
   Tmybg = (金, 木, 水, 火, 土);//好像不能直接定义在函数内部,必须定义在单元 前部

//字符转枚举
function StrToEnum(IStr: string): Tmybg;

//枚举转字符
function EnumToStr(IEnum: Tmybg): string;
implementation

function StrToEnum(IStr: string): Tmybg;
begin
   Result := Tmybg(GetEnumValue(Typeinfo(Tmybg), IStr));
end;

function EnumToStr(IEnum: Tmybg): string;
begin
   Result := GetEnumName(Typeinfo(Tmybg), Ord(IEnum));
end;

3:利用RTTI,可以得到对象的运行时类型信息。下面的代码出自“Delphi 5开发人员指南”第20章,演示了如何取得枚举类型的字符串,举例说,对于TFieldType类型的值ftString,返回字符串“ftString”。
========================================================================================================================
unit MainFrm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DB;

type
TMainForm = class(TForm)
lbSamps: TListBox;
memInfo: TMemo;
procedure FormCreate(Sender: TObject);
procedure lbSampsClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation
uses TypInfo, Buttons;

{$R *.DFM}


procedure TMainForm.FormCreate(Sender: TObject);
begin
   // Add some example enumerated types
   with lbSamps.Items do
   begin
    AddObject('TButtonState', TypeInfo(TButtonState));
    AddObject('TFormStyle', TypeInfo(TFormStyle));
    AddObject('Boolean', TypeInfo(Boolean));
    AddObject('FieldType', TypeInfo(TFieldType));
  end;
end;

procedure TMainForm.lbSampsClick(Sender: TObject);
var
   OrdTypeInfo: PTypeInfo;
   OrdTypeData: PTypeData;
   TypeNameStr: String;
   TypeKindStr: String;
   MinVal, MaxVal: Integer;
   i: integer;
begin
   memInfo.Lines.Clear;
   with lbSamps do
   begin

// Get the TTypeInfo pointer
     OrdTypeInfo := PTypeInfo(Items.Objects[ItemIndex]);
     // Get the TTypeData pointer
     OrdTypeData := GetTypeData(OrdTypeInfo);

// Get the type name string
   TypeNameStr := OrdTypeInfo.Name;
    // Get the type kind string
   TypeKindStr := GetEnumName(TypeInfo(TTypeKind), Integer(OrdTypeInfo^.Kind));

// Get the minimum and maximum values for the type
   MinVal := OrdTypeData^.MinValue;
   MaxVal := OrdTypeData^.MaxValue;


   // Add the information to the memo
   with memInfo.Lines do
   begin
      Add('Type Name: ' TypeNameStr);
      Add('Type Kind: ' TypeKindStr);
      Add('Min Val: ' IntToStr(MinVal));
      Add('Max Val: ' IntToStr(MaxVal));

// Show the values and names of the enumerated types
    if OrdTypeInfo^.Kind = tkEnumeration then
    for i := MinVal to MaxVal do
      Add(Format(' Value: %d Name: %s', [i, GetEnumName(OrdTypeInfo, i)]));
end;
end;
end;
end.



delphi 枚举类型与字符串的转换
作者:九月的海 | 出处:博客园 | 2012/8/15 10:33:58 | 阅读16次
type
TCommandType = (ctEmptyCommand,ctAdd,ctModify);
TCommandTypeConvert=class
public
class function CommandToString(ACommand: TCommandType): string;
class function StringToCommand(const AStrCommand: string): TCommandType;
end;
implementation
class function TCommandTypeConvert.CommandToString(ACommand: TCommandType): string;
begin
Result := GetEnumName(TypeInfo(TCommandType),Ord(ACommand));
end;
class function TCommandTypeConvert.StringToCommand(const AStrCommand: string): TCommandType;
begin
Result := TCommandType(GetEnumValue(TypeInfo(TCommandType), AStrCommand));
end;
end.
  评论这张
 
阅读(988)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017