当我将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.
答案 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 组件部分解决了您的问题。