加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何修复TPageControl背景颜色而不会丢失系统主题?

发布时间:2020-12-15 04:27:46 所属栏目:大数据 来源:网络整理
导读:在启用主题的Delphi 2010应用程序中,我有一个带有clMoneyGreen背景的窗体中的两个TPageControl(一个在另一个)中: 外页控件使用父组件的颜色正确绘制其背景,内页控件使用clBtnFace(图像中的红色省略号)而不是其父控件(TTabSheet)的白色绘制其背景.有没有办法
在启用主题的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版本中不存在缺陷.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读