2012-04-13 4 views
2

TFormTTabSheetにドッキングすると、フォームの背景色が灰色になります。一方のタブ紙には、背景色が白です。タブシートのドッキングされたフォームの色を正しい色に設定するにはどうすればよいですか?

テーマ設定が無効になっていると、それはもっと複雑になります(クラシックなWindowsテーマなど)。

現在のコードでは、灰色のフォームには白いボーダーがあり、これはかなり醜いです。

したがって、フォームの背景色をタブシートの背景色に設定するにはどうすればよいですか?これでうまくいかない場合:タブ紙の背景色をフォームの背景色に設定するにはどうすればよいですか?

実行時テーマを有効にし、実行時テーマを無効にする必要があります。このブログのポストクリスRollistonによってTheming Owner-Drawn Tabs題しへ

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

を見つけた私はそれがネイティブCommonControls TTabSheetは+ 'Form.Dock/ManualDock'今までそれを処理するよりも、このはるかに良いを扱うので、あなたが代わりにJVCLでJvDockingを使用することをお勧め。ユーザーのドラッグ&ドロップドッキングとそのすべてを実行時にしたくない場合は、TPageControlをドロップし、少なくともMS以外の一般的なコントロールのタブ/ページコントロールを使用することをお勧めします。あなたが思うよりもはるかに悪いです。 Win7/64bit上のMSCOMMONCONTROLS dllのバグのために、Win7/32bitよりもWin7/64bit上で異なる動作をします。 –

答えて

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

ヘッド。


引用:

問題:あなたが タブやページコントロールのタブのフォントの色をカスタマイズしたいと言います。これまでのところ、これは単純でした。OwnerDraw をTrueに設定し、フォント を設定してテキストを描画するOnDrawTabのハンドラを提供しました。しかし、Windowsのテーマでは、 は単純ではありません。なぜなら、OwnerDrawをTrueに設定すると、 コントロールのテーマが無効になるからです。このようなVCLの制限ではなく、これは基本的なAPIコントロールの振る舞いを反映するだけであり、それについて考えるなら後方互換性の観点からは が適しています。 しかし、あなたが望むものが分かっていれば、これはまだ問題になります。 は単にタブのキャプションをカスタマイズするだけです。 TTabControlEx およびTPageControlExを入力します。これは、OwnerDrawがTrueに設定されている場合でも、テーマ化APIを使用して の「外観」を提供します。


少なくとも、彼が持っているかもしれないが、部分的に彼のTTabControlExおよび/またはTPageControlExコンポーネントを使用して問題を解決しました。

関連する問題