テーマが有効になっているDelphi2010アプリケーションでは、clMoneyGreenの背景を持つフォームに2つのTPageControls(一方は他方の中にあります)があります。
外側のページコントロールは親コンポーネントの色で背景を正しく描画しますが、内側のページコントロールは、親コントロール(TTabSheet)の白ではなく、clBtnFace(画像の赤い省略記号)で背景を描画します。ページコントロールをWindowsのクラシックな外観(Windowsテーマを失う)に戻さずにこれを修正する方法はありますか?
私がGoogleとここStackOverflowで見つけたすべての修正には、ページコントロールのテーマを失うOwnerDrawが含まれています。
WM_ERASEBKGND Windowsメッセージを処理するメソッドを使用して、TPageControlから継承された新しいページコントロールコンポーネントを作成しようとしました。
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オカレンスをすべて簡単に検索して置き換えることができます。新しいクラスですが、それらのいくつかの後ろにパネルを配置すると、はるかに多くの時間が必要になります。