【发布时间】:2015-05-01 00:28:27
【问题描述】:
我正在编写一个发布名为“Value”的 Variant 属性的组件。 在对象检查器窗口中,我可以看到属性及其类型。
有时,从下拉列表中选择类型“字符串”后,它会变成“未知”。
这里是setter方法的代码:
procedure TMyComponent.FSetValue(const AValue : Variant);
begin
if(FValue <> AValue) OR (TVarData(FValue).VType <> TVarData(AValue).VType) then
begin
FValue := AValue;
if(@FOnChanged <> nil)
then FOnChanged(Self);
end;
end;
有什么需要改变的吗?
更多信息:
当出现“未知”类型时,AValue 参数的类型设置为 256。
在 System.pas 中我发现了这个:
varString = $0100; { Pascal 字符串 256 } {不兼容 OLE }
..但我仍然不明白为什么显示“未知”..
【问题讨论】:
-
FOnChanged 是否声明为 TNotifyEvent?如果是这样,为什么要使用@FOnChanged?删除@符号并重试?
-
@JSON - 这将尝试调用 FOnChanged,并且由于没有参数而无法编译。请改用
Assigned(FOnChanged),这就是Assigned()最初创建的目的 -
@Jason:当然,FOnChanged 是 TNotifyEvent 但它不会影响行为。 //if(@FOnChanged nil) //然后 FOnChanged(Self);类型“未知”仍然出现在对象检查器中。这种行为是否有原因?
标签: delphi types properties set variant