2012-04-13 84 views
2

當我將TForm停靠在TTabSheet上時,窗體的背景顏色爲灰色。另一方面,標籤頁有白色背景色。如何將選項卡中的停靠窗體的顏色設置爲正確的顏色?

當主題被禁用時(例如經典的Windows主題)它會變得更加複雜。

使用當前代碼灰色窗體有一個相當醜陋的白色邊框。

那麼如何將窗體背景顏色設置爲選項卡表背景顏色?如果這不起作用:如何將選項卡表背景顏色設置爲表單背景顏色?

它應該與啓用運行時主題和運行時主題禁用。

program Project1; 

uses 
    Graphics, 
    Controls, 
    Forms, 
    ComCtrls; 

{$R *.res} 

var 
    Main  : TForm; 
    Sub   : TForm; 
    PageControl : TPageControl; 
    TabSheet : TTabSheet; 
begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm, Main); 
    Application.CreateForm(TForm, Sub); 
    PageControl  := TPageControl.Create(Main); 
    PageControl.Parent := Main; 
    PageControl.Align := alClient; 
    TabSheet    := TTabSheet.Create(Main); 
    TabSheet.PageControl := PageControl; 
    Sub.Dock(TabSheet, TabSheet.ClientRect); 
    Sub.Align := alClient; 
    Sub.Show; 
    // Sub.Color := clWhite; // TabSheet.Color; 
    Application.Run; 
end. 
+1

我建議你使用JvDocking在JVCL,而不是因爲它處理這麼多比本地CommonControls TTabSheet +'Form.Dock/ManualDock'永遠不會處理它更好。如果你不希望用戶在運行時拖放對接和所有的東西,那麼我仍然建議你放棄TPageControl,並至少使用一個非MS-通用控件的Tab/page控件。這比你想象的要糟糕得多。 Win7/64bit上的行爲比Win7/32bit上的行爲不同,這要歸功於Win7/64上的MSCOMMONCONTROLS dll中的錯誤。 – 2012-04-13 13:48:07

回答

2

我發現這個解決辦法

type 
    TWinControlAccess = class(TWinControl) 
    end; 

procedure TMainForm.CreateEmbedded(FormClass: TFormClass; Parent: TWinControl); 
var 
    form: TForm; 
begin 
    form := FormClass.Create(Self); 
    form.Align := alClient; 
    form.BorderIcons := []; 
    form.BorderStyle := bsNone; 
    form.Parent := Parent; 
    TWinControlAccess(form).ParentBackground := True; // <<<- 
    form.Show; 
end; 
1

頭題爲Theming Owner-Drawn Tabs通過克里斯Rolliston這個博客文章


行情:

問題:說你要自定義標籤的字體顏色上 標籤或頁面控制。回到當天,這很簡單 - 將OwnerDraw 設置爲True,併爲OnDrawTab提供一個處理程序,該處理程序只設置字體 並繪製文本。但是,對於Windows主題,事情並非如此簡單,因爲將OwnerDraw設置爲True可禁用 控件的主題。這不是一個VCL限制,這僅僅反映了底層API控制的行爲,如果你仔細考慮它,從向後兼容的角度來看它是很有意義的。 儘管如此,如果你知道你想要什麼,這仍然是一個問題,其中 只是自定義標籤的標題。然後,輸入TTabControlExTPageControlEx,即使在OwnerDraw設置爲True時,它們也使用主題API來提供正確的 '外觀'。


至少,他可能有部分解決你的問題,他TTabControlEx和/或TPageControlEx組件。

相關問題