2

当我将 a 停靠TForm到 aTTabSheet时,表单的背景颜色为灰色。另一方面,标签页具有白色背景色。

当主题被禁用(例如经典的 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的题为主题所有者绘制的标签博客文章


引号:

问题:假设您想自定义选项卡或页面控件上选项卡的字体颜色。过去,这很简单——将 OwnerDraw 设置为 True 并为 OnDrawTab 提供一个处理程序,该处理程序只设置字体并绘制文本。然而,对于 Windows 主题,事情并不那么简单,因为将 OwnerDraw 设置为 True 会禁用控件的主题。这不是 VCL 限制,这仅反映了底层 API 控件的行为,如果您考虑一下,从向后兼容性的角度来看,它是很有意义的。尽管如此,如果您知道自己想要什么,这仍然是一个问题,这只是自定义选项卡的标题。然后输入TTabControlExTPageControlEx,它使用主题 API 来提供正确的“外观”,即使 OwnerDraw 设置为 True。


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

于 2012-04-13T17:24:52.180 回答