如何知道定义的枚举类型的个数(想了又想)
如定义了如下枚举类型:
TPrivilegeType = (pvtAddNew{1}, pvtEdit{2}, pvtDel{4}, pvtPrint{8}, pvtCheckIn{16}, pvtCheckInReturn{32}, pvtCheckOut{64}, pvtCheckReturn{128});
要怎么通过代码知道 该枚举TPrivilegeType中有几个值?
[解决办法]
一、对于连续的枚举:
第一种情况: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);
根本没有法子动态得到他的个数
[解决办法]
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;