字符串/文本的枚举(使用自定义值)

时间:2015-07-10 09:21:31

标签: delphi delphi-xe8

可以使用类似的东西将枚举转换为字符串:

uses
TypInfo;

type
  Language = (Delphi,Delphi_Prism,CBuilder);

var
  StrLanguage : String;
begin
  StrLanguage  := GetEnumName(TypeInfo(Language),integer(Delphi)) ; 
end;

(摘自theroadtodelphi

是否可以对具有自定义值的枚举执行相同的操作?

这样的事情:

type
  THotkey = (hkShift= 1, hkSpace= 3, hkEnter= 6);

作为一种解决方法,我使用占位符来跳过未使用的枚举。

然而,如果我不得不跳过巨大的差距,这并不好,而且有问题。

type
  THotkeys = (hkShift, hkUnused1, hkSpace, hkUnused2, hkUnused3, hkEnter);

2 个答案:

答案 0 :(得分:7)

在您的特定用例中,您可以使用与枚举相关的数组,因为具有特定值的枚举常量没有documentation中所述的RTTI

  

没有特定值的枚举常量有RTTI:

type SomeEnum = (e1, e2, e3);
     

而枚举常量具有特定值,例如   以下,没有RTTI:

type SomeEnum = (e1 = 1, e2 = 2, e3 = 3);

你可以像这样解决这个问题:

type
  THotkey = (hkShift, hkSpace, hkEnter);
  THotkeyValues: array[Thotkey] of Integer = (1,3,6);

用法:

ShiftKeyValue := THotkeyValues[hkShift];

答案 1 :(得分:0)

答案就在你的例子中(如果我理解你的要求)

type
  THotkeys = (hkShift, hkUnused1, hkSpace, hkUnused2, hkUnused3, hkEnter);

....

var
  StrLanguage : String;
begin
  StrLanguage  := GetEnumName(TypeInfo(THotkeys),integer(hkSpace)) ;
  ShowMessage(IntToStr(integer(hkSpace)) + ' - ' + StrLanguage);

结果将是:

2 - hkSpace