gpt4 book ai didi

delphi - 如何正确设置变体发布的属性

转载 作者:行者123 更新时间:2023-12-03 19:51:58 25 4
gpt4 key购买 nike

我正在编写一个发布名为“ 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}

..但我仍然不明白为什么显示“未知”。

最佳答案

问题似乎是因为DesignEditors中的函数TVariantTypeProperty.GetValue从Variant值中读取类型,然后尝试在一个受限列表中查找它,该列表似乎仅涵盖OLE兼容变体以及UniCode字符串的特定异常。 TVariantTypeProperty.SetValue的代码将“字符串”转换为varString类型,它似乎是旧样式AnsiString的代理,而不是现代UniCode字符串的代理。 GetValue转换类型varUString以将类型显示为字符串,并将varString保留为“未知”。这看起来像是Delphi设计界面中的错误,因为GetValue和SetValue方法之间确实应该没有任何差异。

我仅在XE2上进行了检查,因此尽管您可以合理地认为至少所有以前的版本(因为Unicode转换都受到了影响)都无法确定,但其他/哪些版本可能/不会受到影响。

关于delphi - 如何正确设置变体发布的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com