最近我发现Delphi对象检查器以灰色显示一些属性。这是一个例子:
我想知道它是什么意思?如何定义这些属性?我没有发现let的定义有任何差异,比如说 DSHostname 和 ProxyHost 。但正如您所见, DSHostname 正常显示, ProxyHost 显示为灰色。
以下是相关财产的相关声明:
/// <summary>The host to proxy requests through, or empty string to not use a proxy.</summary>
property ProxyHost: string read FProxyHost write FProxyHost;
/// <summary>The port on the proxy host to proxy requests through. Ignored if DSProxyHost isn't set.
/// </summary>
[Default(8888)]
property ProxyPort: Integer read FProxyPort write FProxyPort default 8888;
/// <summary>The user name for authentication with the specified proxy.</summary>
property ProxyUsername: string read FProxyUsername write FProxyUsername;
/// <summary>The password for authentication with the specified proxy.</summary>
property ProxyPassword: string read FProxyPassword write FProxyPassword;
答案 0 :(得分:5)
最后,我得到了一个证明 Remy Lebeau 正确的猜测。我做了 TDSClientCallbackChannelManager 的后代,它已经发布了属性 TestProxyHost 。此属性除了在Get和Set中镜像 ProxyHost 之外什么都不做。以下是该组件的完整代码:
unit uTestCallbackChannelManager;
interface
uses
System.SysUtils, System.Classes, Datasnap.DSCommon;
type
TTestCallbackChannelManager = class(TDSClientCallbackChannelManager)
private
function GetTestProxyHost: string;
procedure SetTestProxyHost(const Value: string);
published
property TestProxyHost: string read GetTestProxyHost write SetTestProxyHost;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TTestCallbackChannelManager]);
end;
{ TTestCallbackChannelManager }
function TTestCallbackChannelManager.GetTestProxyHost: string;
begin
Result := ProxyHost;
end;
procedure TTestCallbackChannelManager.SetTestProxyHost(const Value: string);
begin
ProxyHost := Value;
end;
end.
将 TTestCallbackChannelManager 安装到组件面板后,我将其放入测试项目中的表单上。
在Object Inspector中, ProxyHost 属性显示为灰色, TestProxyHost 正常显示。现在,如果我更改 TestProxyHost ,那么 ProxyHost 也会更改。这是一个截图:
这意味着:
唯一的问题是属性编辑器背后的逻辑是什么?当属性可用时以及如何使用它们?看起来这些属性最近在xe10或更早版本中引入。 Embarcadero没有提供有关这些属性的文档(至少目前我找不到任何文档)。 但这是一个单独问题的主题。我怀疑对这些属性的支持尚未经过测试(或者可能尚未实施),因此它们将在未来版本中使用。