Вопрос согласования цветов фонов между вложенной формой и TTabSheet является актуальным для разработчиков, использующих компоненты Delphi. При докинге TForm на TTabSheet, фон формы может иметь серый цвет, в то время как сам TTabSheet остаётся с белым фоном. Это может быть особенно неприятно, когда отключена тематизация интерфейса, например, при использовании классической темы Windows.
Проблема усугубляется наличием белой границы у серой формы, что выглядит неэстетично. Задача состоит в том, чтобы установить цвет фона формы равным цвету фона TTabSheet, и сделать это таким образом, чтобы решение работало как с включенной, так и с отключенной тематизацией в runtime.
Пример кода
Вот пример кода, который демонстрирует, как можно решить эту проблему:
program Project1;
uses
Graphics,
Controls,
Forms,
ComCtrls;
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;
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.CreateEmbedded(TForm, TabSheet); // Используем функцию CreateEmbedded для докинга формы
Sub.Show;
Application.Run;
end.
Объяснение
Ключевым моментом в решении проблемы является использование свойства ParentBackground класса TWinControlAccess. Это свойство позволяет вложенной форме принять цвет фона родительского компонента.
Альтернативные решения
Рассмотрим альтернативные подходы, которые могут быть полезны, если стандартные средства не решают проблему:
Использование компонентов JvDocking из JVCL. Эти компоненты предоставляют более продвинутые возможности для доккинга и могут лучше обрабатывать проблемы согласования цветов.
Использование компонентов TTabControlEx и TPageControlEx, которые позволяют настраивать внешний вид вкладок с поддержкой тематизации.
Заключение
Согласование цветов фонов в TPageControl может быть непростой задачей, но с правильным подходом и использованием дополнительных возможностей компонентов, можно добиться желаемого результата. Важно помнить, что решение должно быть универсальным и работать в различных тематических режимах.
Пользователь столкнулся с проблемой согласования цветов фонов между вложенной формой и TTabSheet в компоненте TPageControl в Delphi, особенно в условиях отключенной тематизации, и ищет решение, которое будет работать в любых темах.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.