无法使用简单的属性编辑器

时间:2014-07-17 14:27:29

标签: delphi delphi-xe2

有一组自定义组件,我们用它来封装一些功能,我试图添加一个自定义属性编辑器,似乎无法弄清楚如何应用它。我们的注册单元中包含以下代码

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?

1 个答案:

答案 0 :(得分:4)

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