在DELPHI中, 利用PropInfo可以获得属性的类型
也能够进行正确的属性与字符串之间的变换.但是我想获得的是像IDE设置界面时, 对于Enum类型能够列出所有变换成字符串后的枚举列表. 这个要调用哪个函数?比如说定义:
TEnumType = ( Enum1, Enum2, Enum3 )
那么只要在组件中发布这个TEnumType类型的属性时, 那么IDE就能够提供下拉框:
Enum1
Enum2
Enum3
提供用户选择
这个下拉的数据是要调用什么函数获取的, TTypeInfo里面找不到...只有一个Name
有哪位大哥知道?
也能够进行正确的属性与字符串之间的变换.但是我想获得的是像IDE设置界面时, 对于Enum类型能够列出所有变换成字符串后的枚举列表. 这个要调用哪个函数?比如说定义:
TEnumType = ( Enum1, Enum2, Enum3 )
那么只要在组件中发布这个TEnumType类型的属性时, 那么IDE就能够提供下拉框:
Enum1
Enum2
Enum3
提供用户选择
这个下拉的数据是要调用什么函数获取的, TTypeInfo里面找不到...只有一个Name
有哪位大哥知道?
GetEnumName(GetTypeData(TEnumType), Integer(Enum1))可以做个for循环,用枚举指做索引变量,就能自动生成三项了
只有TypeInfo和PropInfo还有就是TypeData这三个, 怎样知道哪个是最大值哪个是最小值?
TypInfo;type
TA = (a1,a2);......
var
ti : PTypeInfo;
td : PTypeData;
I : Integer;
begin
ti := TypeInfo(TA);
td := GetTypeData(ti);
for I := td.MinValue to td.MaxValue do
begin
ShowMessage(GetEnumName(ti, I)); end;
end;
用BaseType不行, ParentType也不行, 不知道怎样做了
要是知道内存分配就好了... 可惜没代码...
虽然知道编译的时候肯定会所类型的所有信息, 字符串都会放在内存里面, 就是不知道怎样放的...
Set类型的能够得到enum类型信息吗?
TTypeData = packed record
case TTypeKind of
tkUnknown, tkLString, tkWString, tkVariant: ();
tkInteger, tkChar, tkEnumeration, tkSet, tkWChar: (
OrdType: TOrdType;
case TTypeKind of
tkInteger, tkChar, tkEnumeration, tkWChar: (
MinValue: Longint;
MaxValue: Longint;
case TTypeKind of
tkInteger, tkChar, tkWChar: ();
tkEnumeration: (
BaseType: PPTypeInfo;
NameList: ShortStringBase;
EnumUnitName: ShortStringBase));
tkSet: (
CompType: PPTypeInfo));
TypInfo;type
TA = (a1,a2);
TSetA = set of TA;.........
var
ti : PTypeInfo;
td : PTypeData;
I : Integer;
begin
ti := TypeInfo(TA);
td := GetTypeData(ti);
for I := td.MinValue to td.MaxValue do
begin
ShowMessage(GetEnumName(ti, I)); end;
// ti := TypeInfo(TSetA);
td := GetTypeData(ti); ti := td.CompType^; //集合的基础枚举类型
td := GetTypeData(ti); for I := td.MinValue to td.MaxValue do
begin
ShowMessage(GetEnumName(ti, I)); end;end;