在DELPHI中, 利用PropInfo可以获得属性的类型
也能够进行正确的属性与字符串之间的变换.但是我想获得的是像IDE设置界面时, 对于Enum类型能够列出所有变换成字符串后的枚举列表. 这个要调用哪个函数?比如说定义:
TEnumType = ( Enum1, Enum2, Enum3 )
那么只要在组件中发布这个TEnumType类型的属性时, 那么IDE就能够提供下拉框:
Enum1
Enum2
Enum3
提供用户选择
这个下拉的数据是要调用什么函数获取的, TTypeInfo里面找不到...只有一个Name
有哪位大哥知道?
 

解决方案 »

  1.   

    获取枚举项名称:
    GetEnumName(GetTypeData(TEnumType), Integer(Enum1))可以做个for循环,用枚举指做索引变量,就能自动生成三项了
      

  2.   

    最后的一个参数是不可预料的啊.... 怎样得到枚举类型的最大值和最小值?
    只有TypeInfo和PropInfo还有就是TypeData这三个, 怎样知道哪个是最大值哪个是最小值?
      

  3.   

    uses
      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;
      

  4.   

    还有一个, 获得一个Set类型的, 怎样再获取其中的 Enum 类型
    用BaseType不行, ParentType也不行, 不知道怎样做了
      

  5.   

    不过for循环这种好像只能针对值是连续的那种枚举,手动指定值的那种不知道有没有什么好方法
      

  6.   

    但是手动指值的IDE依旧能够识别, 这才是最郁闷的地方...
    要是知道内存分配就好了... 可惜没代码...
    虽然知道编译的时候肯定会所类型的所有信息, 字符串都会放在内存里面, 就是不知道怎样放的...
    Set类型的能够得到enum类型信息吗?
      

  7.   

    TypInfo.pas(d7):
      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));
      

  8.   

    uses
      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;