有一组自定义组件,我们用它来封装一些功能,我试图添加一个自定义属性编辑器,似乎无法弄清楚如何应用它。我们的注册单元中包含以下代码
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?
答案 0 :(得分:4)
type
TPeripheralMask = Word;
这是一个类型别名。这意味着TPeripheralMask
和Word
指的是同一类型。你需要制作一个新类型。
type
TPeripheralMask = type Word;
相关的documentation说明如下:
当您声明一个与现有类型相同的类型时, 编译器将新类型标识符视为旧类型的别名。 因此,鉴于声明:
type TValue = Real; var X: Real; Y: TValue;
X和Y属于同一类型;在运行时,没有办法 区分TValue和Real。这通常没什么影响, 但如果您定义新类型的目的是利用运行时类型 例如,将属性编辑器与之关联的信息 特定类型的属性 - 区别之间的区别 命名'和'不同的类型'变得重要。在这种情况下,使用 语法:
type newTypeName = type KnownType