在启用主题的Delphi 2010应用程序中,我有一个带有clMoneyGreen背景的窗体中的两个TPageControl(一个在另一个)中:
外页控件使用父组件的颜色正确绘制其背景,内页控件使用clBtnFace(图像中的红色省略号)而不是其父控件(TTabSheet)的白色绘制其背景.有没有办法解决这个问题,而不是将页面控件返回到其Windows经典外观(失去Windows主题)?
我在Google中发现的所有修复程序和Stack Overflow都涉及到OwnerDraw,从而使页面控制失去主题.
我尝试使用一个方法来创建从TPageControl继承的新的页面控件组件来处理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事件与我的新课程,但将面板放在其中一些将需要更多的时间.