Delphi 2009 - 对象检查器中的自定义枚举类型属性

标签 delphi delphi-2009 custom-component

我创建了一个自定义 TAction 类型,它有 2 个额外的属性,分别是字符串类型和枚举类型。

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

最佳答案

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

好像找不到RTTI信息。枚举类型在哪里定义?在与组件相同的文件中?

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

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

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

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

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

这可能是问题的根源。

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

第一步,派生一个属性编辑器。在您的情况下,TEnumProperty(单位 DesignEditors)可能就足够了,只需稍作改动。

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

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

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

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

只需查看组件编写者指南即可获得更多信息。

关于Delphi 2009 - 对象检查器中的自定义枚举类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/729315/

相关文章:

delphi - 如何向 TSpeedButton 添加属性 (Delphi)

delphi - Delphi 2009:传递组件名称onclick事件,然后设置属性

android - 如何以编程方式设置自定义组件的自定义属性?

delphi - 为什么 Delphi 变体不能保存对象?

delphi - 通用类型的大小

delphi - ADO 查询导致 mdb 数据库超过 2GB 限制

delphi - Indy 10 + XE8 长文件名分段上传

delphi - 当显示对话框时淡出应用程序的所有其他窗口?

delphi - 使用 TJSONUnMarshal 自定义注册恢复器意外失败

macos - Delphi 10.3.2 Catalina 公证失败,但 Apple 确实不公证