如何知道定义的枚举类型的个数(想了又想)

肥仔胧 2007-07-19 05:43:22
如定义了如下枚举类型:
TPrivilegeType = (pvtAddNew{1}, pvtEdit{2}, pvtDel{4}, pvtPrint{8}, pvtCheckIn{16}, pvtCheckInReturn{32}, pvtCheckOut{64}, pvtCheckReturn{128});

要怎么通过代码知道 该枚举TPrivilegeType中有几个值?
...全文
166 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
肥仔胧 2007-07-24
  • 打赏
  • 举报
回复
up
肥仔胧 2007-07-20
  • 打赏
  • 举报
回复
logne的方法若是遇到
TEumType=(eTest1=1,eTest=3,etest=5,etest=7,etest=1);
会提示has no typeinfo的问题,编译不过
logne 2007-07-19
  • 打赏
  • 举报
回复
use typinfo
procedure GetEnumInfo;
var
OrdTypeInfo: PTypeInfo;
OrdTypeData: PTypeData;

TypeNameStr: String;
TypeKindStr: String;
MinVal, MaxVal: Integer;
EnumCount: integer;
begin
// Get the TTypeInfo pointer
OrdTypeInfo := TypeInfo(TFormStyle)
// 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;
EnumCount := MaxVal - MinVal;
end;
brightyang 2007-07-19
  • 打赏
  • 举报
回复
一、对于连续的枚举:
第一种情况:TEumType=(eTest1,eTest2,etest3,etest4,etest5); //是0-4
第一种情况:TEumType=(eTest1=2,eTest2,etest3,etest4,etest5) //是2-6
可以这样得到数量:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i := Ord(High(TEnumType)) - Ord(Low(TEnumType))+1;

ShowMessage(IntToStr(i));
end;

二、对于不连续的枚举:
第三种情况(跳跃式或后边的比前面的小):TEumType=(eTest1=1,eTest=3,etest=5,etest=7,etest=1);
根本没有法子动态得到他的个数

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧