簡體   English   中英

如何修復TPageControl背景顏色而不丟失系統主題?

[英]How to fix TPageControl Background Color without losing the system theme?

在啟用了主題的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版本中沒有這個缺陷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM