2016-09-06 406 views
2

我遇到了一個問題,我無法正常更改背景顏色(例如clwhiteTToolBar及其屬性ToolBar.Color。我對Delphi不是很有經驗,我發現了兩種可能的解決方案,但我仍然想知道,如何正確地改變它,或者爲什麼它不可能。更改TToolBar背景顏色

1)將樣式更改爲漸變,但它也會更改按鈕的基本動畫。

ToolBar.DrawingStyle := dsGradient 
ToolBar.GradientStartColor := clWhite 
ToolBar.GradientEndColor := clWhite 

2)將TToolBar內部TPanel具有以下設置。

Panel.Color := clwhite 
ToolBar.Parent := Panel 
ToolBar.Align := alClient 
ToolBar.Transparent := True 
+0

'ParentColor'爲false? –

+0

@LURD當然,當你改變'Color'屬性時,它會自動設置爲False。 – Triber

+1

主題控件是主題。你不能確定他們的顏色。主題確實如此。如果你不喜歡,請禁用主題。 –

回答

6

默認情況下,TToolbar忽略其Color屬性。
默認情況下,Transparent屬性爲true,因此無論工具欄父級的顏色是否會透過。

如果你看看VCL的源代碼,你會發現TToolbar不會自己繪製;它是ComCtl32.dll中的ToolbarWindow32 Win32公共控件的封裝。
這是執行繪圖的代碼。
當Windows XP引入時,微軟添加了UI主題,Borland通過VCL.Themes.TStyleManager支持。
您可以通過樣式管理器改變公共控件的外觀:Project -> Options -> Appearance -> Custom Styles,但它很難知道什麼樣的影響這,因爲IDE不顯示的結果(你可以在運行時看到它),你只能選擇有限的相當奇怪的主題列表;該功能也是越野車。

TPageControl/TTabSheet也是這樣,它不會發布它的Color propery。
所有通過ComCtl32.dll導入並由VCL.ComCtrls執行的控件都會受到這些不一致的影響。

總之
你沒有什麼可以做,使TToolbar尊重其Color財產。
你已經找到了解決辦法:

  1. 設置具有相同GradientEndColorGradientStartColor一個梯度。

  2. 放在另一個控制工具欄(例如TPanel),並更改控件的顏色,因爲該工具欄是透明的父顏色將閃耀。
    您需要將面板的BevelInner/BevelOuter設置爲bvNone

  3. 啓用VCL樣式,並且遇到與該公司tickbox反模式有關的所有問題。