2016-07-17 10 views
9

最近、私はDelphiのオブジェクトインスペクタがいくつかのプロパティをグレーで表示することを発見しました。次に例を示します。どのようにDelphiのオブジェクトインスペクタはいくつかのプロパティをグレーですか?

Object Inspector grayed properties Example

私はそれが何を意味するのだろうか?どのようにそのようなプロパティが定義されています私は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

ドキュメントへのリンクは確かに役に立ちます。 –

+0

@LURD、どのようなドキュメントをお探しですか? – Alex

+0

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

答えて

5

は最後に、私はレミールボーが彼の推測に正しかったことを証明しました。私はTDSClientCallbackChannelManagerの子孫を作成しました。これは、プロパティTestProxyHostを公開しています。このプロパティは、取得と設定で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. 

IコンポーネントパレットにTTestCallbackChannelManagerをインストールした後、私はテストプロジェクトのフォーム上でドロップされました。 ProxyHostプロパティは通常通り灰色とTestProxyHostに表示されるオブジェクトインスペクタで

。今変更した場合TestProxyHostProxyHostも変更されています。ここではスクリーンショットです:

ProxyHost property is changed

これは意味:ProxyHost財産

  1. RTTI情報がどのような方法でを変更し、それが実際に読み込まれていなかった/両方のデザインにプロパティを書きます - と実行時。
  2. このような動作を実現する唯一の方法は、プロパティエディタレベルです。 プロパティエディタこの特定のためプロパティ名こののコンポーネントタイプは、 "あなたにこのプロパティを設定することはできません"(ただし、他のコードで直接行うことができます) "と伝えます。
  3. これは、オブジェクトインスペクタのオプション「ProxyHost(および関連する3つのプロパティ)」の[読み取り専用プロパティを表示する]チェックボックスをオフにしてもオブジェクトインスペクタに表示される理由についても説明します。これは、Object Inspectorがdfmのプロパティを読み取り/書き込みとして読み取り、それらのプロパティエディタを作成し、一度プロパティエディタがグレーで塗りつぶされたプロパティを書き込めないと言ったためです(ただし、プロパティエディタは既に作成済みです) 。

唯一の問題は、プロパティエディタの背後にあるロジックですか?プロパティが利用可能になると、それらを使用する方法?非常に最近にxe10や少し前にプロパティが導入されたようです。 Embarcaderoはこれらのプロパティに関するドキュメントを提供していません(少なくとも今のところは見つけられませんでした)。 しかし、これは別の質問の対象です。私は、これらのプロパティのサポートがまだテストされていない(または実装されていない可能性があります)ため、将来のリリースでの使用が意図されていると考えています。

関連する問題