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.
4

2 に答える 2

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;
于 2016-05-18T20:32:48.183 に答える
1

Chris RollistonによるTheming Owner-Drawn Tabsというタイトルのこのブログ投稿に進んでください。


引用:

問題: タブまたはページ コントロールのタブのフォントの色をカスタマイズしたいとします。以前は、これは単純でした — OwnerDraw を True に設定し、フォントを設定してテキストを描画するだけの OnDrawTab のハンドラーを提供します。ただし、Windows テーマでは、OwnerDraw を True に設定するとコントロールのテーマが無効になるため、物事はそれほど単純ではありません。それ自体は VCL の制限ではなく、これは基になる API コントロールの動作を反映しているだけであり、考えてみれば、後方互換性の観点からは理にかなっています。とはいえ、単にタブのキャプションをカスタマイズしたいという目的がわかっている場合、これは依然として問題です。次に、TTabControlExTPageControlExを入力します。、テーマ API を使用して、OwnerDraw が True に設定されている場合でも適切な「外観」を提供します。


少なくとも、彼はTTabControlExおよび/またはTPageControlExコンポーネントであなたの問題を部分的に解決したかもしれません。

于 2012-04-13T17:24:52.180 に答える