delphi – 如何修复TPageControl背景颜色而不会丢失系统主题?
在启用主题的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事件与我的新课程,但将面板放在其中一些将需要更多的时间. 解决方法
这是Delphi 2010中的一个已知错误.您可以通过添加一个面板,该面板是最外层标签页的子项,并且是内页控件的父代.
我不知道为什么这会解决问题.我只发现自己的解决方法,因为我注意到在我的应用程序中,唯一嵌套的标签页/页面控件正确渲染是具有适当插入的面板. 如果我记得正确,最新的Delphi版本中不存在缺陷. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |