当我将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.
我找到了这个解决方法
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;
前往这篇名为 Chris Rolliston 的标题为主题所有者绘制的标签的博客文章。
引号:
问题:假设您想自定义选项卡上选项卡的字体颜色 选项卡或页面控件。 过去,这很简单——设置 OwnerDraw 为 True 并为仅设置字体的 OnDrawTab 提供处理程序 并绘制文本。 然而,对于 Windows 主题,情况并非如此 很简单,因为将所有者绘制设置为 True 会禁用主题 控制。 本身不是VCL限制,这仅反映了 底层 API 控件的行为,如果您考虑一下,它会 从向后兼容性的角度来看,这是很有意义的。 尽管如此,如果您知道自己想要什么,这仍然是一个问题,这 只是自定义选项卡的标题。 然后输入 TTabControlEx 和 TPageControlEx,它们使用主题 API 来提供适当的 "查看",即使 OwnerDraw 设置为 True。
至少,他可能已经部分解决了你的TTabControlEx和/或TPageControlEx组件的问题。