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

前端之家收集整理的这篇文章主要介绍了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版本中不存在缺陷.

原文链接:https://www.f2er.com/delphi/101497.html

猜你在找的Delphi相关文章