2012-01-03 40 views
2

我想將顏色方案應用於我的應用程序。這是通過使所有組件的ParentColor設置爲true以及ParentBackgroundParentFont來完成的。當我改變表單的顏色時,一切都會改變。有一個例外:工具欄和工具按鈕不會更改。是否可以用表單的顏色來改變它們,還是我必須以另外的方式實現它?如何啓用應用程序範圍的配色方案?

這同樣適用於字體顏色,但這是一件更奇怪的事情。當我更改表單的字體顏色時,Groupbox標題的字體顏色不會更改,但標籤標題的標題(也在Groupbox內)會更改。

當實現某種方式讓用戶選擇他自己的顏色是這種方式(改變表單顏色,使所有組件有ParentColor設置)還是有更好的方法來實現這一目標?

+4

許多Windows控件的設計不支持任意顏色。 Delphi,XE2的最新版本引入了一項名爲VCL樣式的新功能。這可能是實現您所需要的最簡單,最快捷的方式。 – 2012-01-03 19:17:41

+0

它們中的一些,如組框,檢查或單選按鈕可能會受到主題的影響,因此您無法爲其指定字體或父字體。您將不得不修改它們以獲得此支持。或者你可能會得到Delphi XE2,正如David所指出的那樣是VCL風格。 – TLama 2012-01-03 20:23:36

+0

這意味着要枚舉要更改的組件併爲其分配您想要的顏色。我希望我忘記了一些事情:-)我還沒有XE2,但這個VCL方案聽起來很有趣。謝謝你的幫助! – Arnold 2012-01-03 21:04:41

回答

1

實現此目的的一種方法是使用interfaces

這是一個(手動)工作,但如果你想以一種簡單的方式來做,你可以簡單地定義一個接口並確保你的所有表單都實現了這個接口。

例如:

type ITheme = interface 
    procedure SetTheme(const AColor : TColor); 
end; 

然後在每個你形成你可以實現這個接口。

因此,要改變所有形式的顏色的,你只需要調用1個功能:

procedure SetGlobalTheme(const AColor : TColor); 
var Intf : ITheme; 
begin 
    for i:=0 to screen.Formcount-1 do 
    begin 
    if Supports(Screen.Forms[i],ITheme,intf) then 
     intf.SetTheme(AColor); 
    end; 
end; 

使用此方法讓每個部件顏色的完全控制,儘管有更多的一些編碼工作要做。另一種方法是使用David對VCL樣式的建議(如果您的IDE支持它)

+0

這是一個有用的提示,如果我有很多形式,但我只有一個,並希望通過這個問題了解如何避免手動實現我現在執行的顏色。 – Arnold 2012-01-06 06:53:59

相關問題