【问题标题】:Delphi 2009 - Custom Enum type property in the Object InspectorDelphi 2009 - 对象检查器中的自定义枚举类型属性
【发布时间】:2009-04-08 09:58:27
【问题描述】:

我创建了一个自定义 TAction 类型,它有 2 个附加属性,它们是字符串类型和枚举类型。

字符串值在对象检查器中正常显示,但是枚举类型根本没有出现。如何获取自定义枚举类型以在对象检查器中显示为下拉属性值?

【问题讨论】:

    标签: delphi delphi-2009 custom-component


    【解决方案1】:

    枚举属性应该使用默认的 TEnumProperty 类来编辑属性。

    似乎找不到 RTTI 信息。枚举类型在哪里定义?与组件在同一个文件中?

    您是否使用具有自定义值的枚举类型,例如:

    TMyEnum = (aA = 1, aB = 3);
    

    解释:如果你定义了一个带有值的枚举,你就创建了一个带有预定义常量的子范围类型。所以上面要解释为:

    type
      TMyEnum = 1..3;
    const
      aA : TMyEnum = 1;
      aB : TMyEnum = 3;
    

    这可能会导致奇怪的情况,例如:Succ(aA) 不是 aB 而是 2。 该信息在帮助(语言指南)简单类型[具有显式分配序数的枚举类型]中。

    这可能是问题的根源。

    如果一切都失败了,您可以创建自己的属性编辑器。它能够更改对象检查器中的枚举属性。通常你可以使用默认的 TEnumProperty。但如果这还不够,你可以自己动手:

    第 1 步,派生一个属性编辑器。在您的情况下,可能 TEnumProperty (单位设计编辑器)可能就足够了,可能只需要很少的改动。

    第 2 步,确保 GetValue 和 SetValue 方法正常工作。他们需要将字符串转换为枚举属性并返回。

    第 3 步,如果您想要真正的特殊编辑,请确保覆盖编辑方法。

    第 4 步,确保编辑器属性有效。

    第五步,使用RegisterPropertyEditor注册属性编辑器。

    请查看组件编写者指南了解更多信息。

    【讨论】:

    • 您好,感谢您的建议。我正在用自定义值定义枚举,所以我删除了这些,只是让编译器生成值,它工作正常。但是,仅供参考,您知道为什么不能在默认对象检查器中为枚举属性分配自定义值吗?
    • 如果您分配自定义值,它就不再是枚举(它在帮助文件中的某个位置)。
    猜你喜欢
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2022-12-17
    • 2018-08-27
    • 2011-09-11
    • 2020-07-19
    • 2019-04-22
    • 2016-07-17
    相关资源
    最近更新 更多