2016-07-17 5 views
9

Vor kurzem fand ich, dass Delphi Objekt-Inspektor einige Eigenschaften in grau zeigt. Hier ein Beispiel:Wie Delphi Objektinspektor einige Eigenschaften grau?

Object Inspector grayed properties Example

Ich frage mich, was bedeutet es? Wie sind solche Eigenschaften definiert? Ich fand keine Unterschiede in der Definition von sagen wir mal DSHostname und Proxyhost. Aber wie Sie DSHostname sehen wird normalerweise angezeigt und Proxyhost in grau.

Hier ist eine entsprechende Erklärung der Eigenschaften in Frage:

/// <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

Ein Link zur Dokumentation würde sicherlich helfen. –

+0

@LURD, um welche Art von Dokumentation bitten Sie? – Alex

+0

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

Antwort

5

Schließlich bekam ich einen Beweis dafür, dass Remy Lebeau Recht in seiner Vermutung war. Ich habe einen Nachkommen von TDSClientCallbackChannelManager die Eigenschaft TestProxyHost veröffentlicht hat. Diese Eigenschaft führt nur die Spiegelung ProxyHost in Get und Set aus. Hier ist der vollständige Code für die Komponente:

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. 

Nachdem ich TTestCallbackChannelManager in Komponentenpalette installierte ich auf einem Formular in einem Testprojekt tropfte.

im Objektinspektor die Proxyhost Eigenschaft wird in grau angezeigt und TestProxyHost als normal. Nun, wenn ich ändern TestProxyHost dann Proxyhost auch geändert wird. Hier ist ein Screenshot:

ProxyHost property is changed

Das bedeutet:

  1. RTTI-Informationen von Proxyhost Eigenschaft wurde nicht verändert in irgendeiner Weise, und es ist in der Tat ein Lese-/Schreib-Eigenschaft in Design - und Laufzeit.
  2. Der einzige Weg, um ein solches Verhalten zu erreichen, ist der Eigenschaften-Editor Ebene. Der Eigenschafteneditor für diesen bestimmten Eigentumsname in dieser Komponententyp "informiert" Objektinspektor "Hey, ich kann diese Eigenschaft für Sie nicht einstellen" (aber ein anderer Code kann es direkt tun).
  3. Dies erklärt auch, warum, wenn ich deaktivieren Flagge im Objektinspektor Optionen Proxyhost (3 bezogenen Eigenschaften) sind nach wie vor im Objektinspektor angezeigt „Nur Eigenschaften lesen“. Dies liegt daran, dass der Objektinspektor die Eigenschaften von dfm als Lese-/Schreibzugriff liest und dann Eigenschafteneditoren für sie erstellt und der Eigenschafteneditor sagt, dass er die Eigenschaft nicht schreiben kann, die grau schattiert ist (aber immer noch als Eigenschafts-Editor angezeigt wird). .

Das einzige Problem ist, welche Logik hinter dem Eigenschaftseditor? Wann werden die Eigenschaften verfügbar und wie werden sie verwendet?Es sieht so aus, als wären die Eigenschaften erst kürzlich in xe10 oder etwas früher eingeführt worden. Und Embarcadero bietet keine Dokumentation über diese Eigenschaften (zumindest für den Moment konnte ich keine finden). Aber das ist ein Thema der getrennten Frage. Ich vermute, dass die Unterstützung für diese Eigenschaften noch nicht getestet wurde (oder möglicherweise nicht implementiert ist) und daher für die Verwendung in zukünftigen Versionen gedacht ist.

Verwandte Themen