2015-12-02 37 views
2

我注意到當我禁用控件(controlName.enabled := false;)時,它們會自動變爲半透明。如何讓我禁用的控件不透明?

有沒有辦法強制他們保持不透明?

我試過controlName.Opacity := 1;但這似乎沒有做任何事情。

我也嘗試在TLayout中嵌入控件,然後禁用TLayout,但半透明似乎被嵌入式控件拾取。

[編輯]

這裏就是我看到在這種情況下,它覆蓋了的TLabel包含一個大國會F.

enter image description here

+0

你爲什麼要這麼做?我想你可能需要在Firemonkey源代碼中搜索,以瞭解如何禁用影響繪畫,以覆蓋它。 –

+0

小故事是我在表單上有一個TSplitter。手柄不會顯示在Android或iOS上。表示TSplitter在那裏給用戶。我已經添加了一個矩形作爲它的一個子項,然後設置它的顏色(似乎沒有辦法直接給TSplitter着色)。一旦將矩形添加到TSplitter,它不再有效(TRectangle截取點擊對於一些gawd未知的原因)。禁用TRectangle允許TSplitter再次工作;然而,當我滑動分離器(或根據你如何定位它),你可以看到你滑過的控件的鬼魂。 – BIBD

+0

半透明?真?你可以看到他們背後有什麼? –

回答

3

您可以添加到窗體兩個按鈕設置DisabledOpacity爲1

見例如:

procedure TForm2.Button2Click(Sender: TObject); 
begin 
    Button1.DisabledOpacity := 1; 
    Button1.Enabled := not Button1.Enabled; 
end; 

這是一個受保護的成員,所以你必須重寫代碼的控制。

TButton = class(FMX.Stdctrls.TButton) 
// 
    end; 

    TForm2 = class(TForm) 
    Button1: TButton; 
    Button2: TButton; 
    procedure Button2Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 
+0

你可以公開一個私人會員的類別嗎? – kobik

+0

是的,這對我有用。 –

+1

技術上它是受保護的,所以我在答案中改變了它。 –

4

設置你的控制(TRectangle)的一個例子hittest := false;

它將不再捕獲鼠標事件,並且父控件將會。 對於其他控件,您可以將它與Tabstop:=false結合使用。現在它不會獲得焦點,因此大多數功能都將被禁用。

+0

+1對於我的具體情況,這是一個更簡單的解決方案。另一個答案更好地回答了我原來的問題,所以得到了複選標記。謝謝你給我兩個。 – BIBD

0

DisabledOpacity是TControl的私有財產,您可以在FMX.Controls.TControl中找到它。

您可以創建一個自定義類的TControl的地方DisabledOpacity是公共並將其設置爲您的控件像(每TControl類後裔):

TmyC = class(TControl) 
    public 
    property DisabledOpacity; 
    end; 

... 

    TmyC(Button1).DisabledOpacity := 1;