В приложении Delphi 2010 с включенными темами у меня есть два TPageControls (один внутри другого) в форме с фоном clMoneyGreen:
Элемент управления внешней страницы правильно рисует свой фон с цветом родительского компонента, однако внутренний элемент управления страницей рисует его фон с помощью clBtnFace (красный эллипс на изображении) вместо его родительского элемента управления (TTabSheet) белого цвета. Есть ли способ исправить это, не возвращая элемент управления страницы в свой классический внешний вид (потерять тему Windows)?
Все исправления, которые я нашел в Google, и здесь, в Stack Overflow, входит OwnerDraw, которые заставляют элемент управления страницы терять свою тематику.
Я попытался создать новый компонент управления страницей, унаследованный от TPageControl, с помощью метода обработки сообщения Windows WM_ERASEBKGND:
procedure TMyPageControl.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin
if Parent is TCustomPageControl then
begin
Brush.Color := clWhite;
Windows.FillRect(Msg.dc, ClientRect, Brush.Handle);
Msg.Result := 1;
end
else
inherited;
end;
Он окрашивает белый фон, но другой метод, вызванный после WM_ERASEBKGND (я предполагаю метод TWinControl WM_PAINT), перерисовывает серый цвет на белом фоне.
Примечание. Я изучаю это, потому что я реализую их в большом приложении, перенесенном с Delphi 7, поэтому я пытаюсь решить эту проблему через производный компонент: я могу легко найти и заменить все 207 TPageControl вхождения с моим новым классом, но размещение панелей за некоторыми из них потребует больше времени.