2016-07-17 74 views
9

最近我發現Delphi對象檢查器以灰色顯示一些屬性。這裏有一個例子:Delphi對象檢查器如何灰顯一些屬性?

Object Inspector grayed properties Example

我不知道這是什麼意思?這些屬性是如何定義的?我沒有發現定義的任何差異,比如說DSHostnameProxyHost。但正如你所看到的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

鏈接到文檔肯定會有所幫助。 –

+0

@LURD,你要求什麼樣的文件? – Alex

+0

http://docwiki.embarcadero.com/Libraries/Berlin/en/Datasnap.DSCommon.TDSClientCallbackChannelManager_Properties –

回答

5

最後我得到了一個證明,雷米勒博是對他的猜測。我做了的後裔TDSClientCallbackChannelManager已發佈屬性TestProxyHost。該屬性除了在Get和Set中鏡像ProxyHost。下面是該組件的全碼:我安裝TTestCallbackChannelManager到組件面板中我在一個測試項目下降的形式

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. 

後。

在對象檢查的ProxyHost屬性顯示爲灰色和TestProxyHost爲正常。現在,如果我更改TestProxyHost然後ProxyHost也被更改。下面是截圖:

ProxyHost property is changed

這意味着:

  1. RTTI信息的ProxyHost的財產沒有改變以任何方式,它確實是一個讀/在設計上寫屬性 - 和運行時間。
  2. 實現此類行爲的唯一方法是在Property Editor級別。該屬性編輯器註冊了這個特殊的屬性名在這個組件型「告訴」對象檢查器「嘿嘿,我不能設置該屬性爲你」(但在其他代碼可以直接做到這一點)。
  3. 這也解釋了爲什麼如果我取消選中對象檢查器選項中的「顯示只讀屬性」標誌ProxyHost(和3個相關屬性)仍顯示在對象檢查器中。這是因爲Object Inspector從dfm讀取屬性爲讀/寫,然後爲它們創建屬性編輯器,一旦屬性編輯器說它無法寫入它們以灰色陰影的屬性(但仍顯示爲已經創建屬性編輯器) 。

唯一的問題是屬性編輯器背後的邏輯是什麼?當這些屬性可用時以及如何使用它們?看起來這些屬性是最近在xe10中引入的,或者稍早。 Embarcadero沒有提供關於這些屬性的文檔(至少現在我找不到任何文檔)。 但這是另外一個問題。我懷疑這些屬性的支持尚未經過測試(或可能未執行),因此它們旨在用於將來的版本。