【问题标题】:Can't get simple property editor to be used无法使用简单的属性编辑器
【发布时间】:2014-07-17 14:27:28
【问题描述】:

A 有一组自定义组件,用于封装某些功能,我正在尝试添加自定义属性编辑器,但似乎无法弄清楚如何应用它。我们的注册单元里面有如下代码

type
  THexWordProperty = class(TIntegerProperty)
  public
    function GetValue: string; override;
  end;

{ THexProperty }

function THexWordProperty.GetValue: string;
begin
  Result := '$'+IntToHex(GetOrdValue, 4);
end;

接着是下面的调用

RegisterPropertyEditor(TypeInfo(TPeripheralMask),nil,'',THexWordProperty);

在注册过程中。

尽管重建了软件包、卸载、重新安装和重新启动 Delphi,但我无法让我的任何 TPeripheralMask 属性显示任何不同。据我所知,这是最简单的属性编辑器,因为我只是试图让一个简单的序数属性以不同的(但仍然对输入有效)形式显示。

实际的属性类型被简单地定义为type TPeripheralMask = Word;,我应该做些什么来支持这种类型的额外RTTI?

【问题讨论】:

    标签: delphi delphi-xe2


    【解决方案1】:
    type  
      TPeripheralMask = Word;
    

    这是一个类型别名。这意味着TPeripheralMaskWord 指的是同一类型。你需要创建一个新类型。

    type  
      TPeripheralMask = type Word;
    

    相关的documentation 说如下:

    当您声明与现有类型相同的类型时, 编译器将新类型标识符视为旧类型标识符的别名。 因此,给定声明:

    type TValue = Real;
    var
      X: Real;
      Y: TValue;
    

    X 和 Y 属于同一类型;在运行时,没有办法 将 TValue 与 Real 区分开来。这通常影响不大, 但是如果您定义新类型的目的是利用运行时类型 信息,例如,将属性编辑器与 特定类型的属性——“不同”之间的区别 名称”和“不同类型”变得很重要。在这种情况下,使用 语法:

    type newTypeName = type KnownType
    

    【讨论】:

    • 我知道这很简单,现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多