如何将标签页中停靠表单的颜色设置为正确的颜色?

时间:2012-04-13 11:26:05

标签: delphi colors themes delphi-2007 pagecontrol

当我将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.

2 个答案:

答案 0 :(得分: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 :(得分:1)

前往 Chris Rolliston Theming Owner-Drawn Tabs 博客帖子


行情:

  

问题:假设您要自定义标签上的标签颜色   标签页或页面控件。回到白天,这很简单 - 设置OwnerDraw   to True并为OnDrawTab提供只设置字体的处理程序   并绘制文本。但是,对于Windows主题,事情并非如此   很简单,因为将OwnerDraw设置为True会禁用主题   控制。这不是VCL限制,这仅仅反映了   底层API控件的行为,如果你考虑它,它   从向后兼容的角度来看很有意义。   尽管如此,如果您知道自己想要什么,这仍然是一个问题   只是自定义标签的标题。然后输入 TTabControlEx   和 TPageControlEx ,它们使用主题API来提供正确的   即使OwnerDraw设置为True,也会“看”。


至少,他可能通过 TTabControlEx 和/或 TPageControlEx 组件部分解决了您的问题。