【发布时间】:2009-04-08 09:58:27
【问题描述】:
我创建了一个自定义 TAction 类型,它有 2 个附加属性,它们是字符串类型和枚举类型。
字符串值在对象检查器中正常显示,但是枚举类型根本没有出现。如何获取自定义枚举类型以在对象检查器中显示为下拉属性值?
【问题讨论】:
标签: delphi delphi-2009 custom-component
我创建了一个自定义 TAction 类型,它有 2 个附加属性,它们是字符串类型和枚举类型。
字符串值在对象检查器中正常显示,但是枚举类型根本没有出现。如何获取自定义枚举类型以在对象检查器中显示为下拉属性值?
【问题讨论】:
标签: delphi delphi-2009 custom-component
枚举属性应该使用默认的 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注册属性编辑器。
请查看组件编写者指南了解更多信息。
【讨论】: