Delphi 2009 - 对象检查器中的自定义枚举类型属性
我创建了一个自定义 TAction 类型,它有 2 个附加属性,分别是字符串类型和枚举类型。
字符串值在对象检查器中正常显示,但是枚举类型根本没有出现。 如何获取自定义枚举类型以在对象检查器中显示为下拉属性值?
I have created a custom TAction type which has 2 additional properties which are of type string, and enumeration.
The string value is showing in the object inspector fine, however, the enumeration type is not appearing at all. How can I get a custom enumeration type to display as a drop down property value in the object inspector?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
枚举属性应使用默认的 TEnumProperty 类来编辑属性。
貌似找不到RTTI信息。 枚举类型在哪里定义的? 与组件在同一个文件中?
您是否使用带有自定义值的枚举类型,例如:
说明:如果您定义带有值的枚举,则会创建带有预定义常量的子范围类型。 因此,上面的内容应解释为:
这可能会导致奇怪的情况,例如:Succ(aA) 不是 aB,而是 2。
该信息位于帮助(语言指南)简单类型 [具有显式分配序数的枚举类型] 中。
这可能是问题的根源。
如果一切都失败了,您可以创建自己的属性编辑器。 它能够更改对象检查器中的枚举属性。 通常您可以使用默认的 TEnumProperty。 但如果这还不够,您可以自己动手:
第一步,派生一个属性编辑器。 在你的情况下,TEnumProperty(单位DesignEditors)可能就足够了,可能只需要很少的改变。
第 2 步,确保 GetValue 和 SetValue 方法正常工作。 他们需要将字符串转换为枚举属性并返回。
步骤 3,如果您想要真正的特殊编辑,请确保覆盖编辑方法。
第 4 步,确保编辑器属性有效。
第5步,使用RegisterPropertyEditor注册属性编辑器。
只需查看组件编写器指南即可获取更多信息。
Enum properties should use the default TEnumProperty class to edit the properties.
It looks like the RTTI information can not be found. Where is the enum type defined? In the same file as the component?
And do you use an enum type with custom values like:
Explanation: if you define an enum with values, you create a subrange type with predefined constants. So the above is to be interpreted as:
This can lead to strange situations like: Succ(aA) is not aB but 2.
The information is in the help (Language Guide) Simple types [Enumerated Types with Explicitly Assigned Ordinality].
This can be the source of the problem.
If all else fails, you can create your own property editor. Which is able to change the enum property in the object inspector. Normally you will be able to use the default TEnumProperty. But if that is not enough, you can roll your own:
Step 1, derive a property editor. In your case probably TEnumProperty (unit DesignEditors) will be enough probably with little changes.
Step 2, be sure the GetValue and SetValue methods work fine. They need to translate a string into the enum property and back.
Step 3, if you want real special editing be sure the override the edit method.
Step 4, be sure th eeditor attributes are valid.
Step 5, register the property editor using RegisterPropertyEditor.
Just look at the component writers guide for more information.