VCLソースを変更してXP以降のテーマ対応時にGroupBoxのタイトル文字に色を付ける
47 GroupBoxDrawCaption 動作確認 Delphi2007 更新日 2008/01/29(火)

WindowsXPやWindowsVistaではデフォルトで
テーマというものが適応されてかっこいい画面になっています。

そのテーマが適応されている場合に
GroupBoxのタイトル色がFontのColorを変更しても反映されません。
clBackgroundの色になってしまいます。



これはDelphi製アプリの問題でもなく
VC++製アプリでも同じ動作になるので
Windowsのコントロールも自動で色が変更されているようです。

VCLでは独自に描画しているので
簡単にVCLソースを変更し対応することができます。

まず、TGroupBoxの描画は
StdCtrls.pasで行われています。

D2007の場合、ここにありました。
    C:\Program Files\CodeGear\RAD Studio\5.0\source\Win32\vcl

ここから StdCtrls.pas をコピーして
プロジェクトのあるフォルダ、つまりUnit1.pasと同じ場所に配置します。

コピーした StdCtrls.pas の中身をみて
procedure TCustomGroupBox.Paint; の数行を変更しましょう。

if Text <> '' then
 ThemeServices.DrawText(Handle, Details, Text, CaptionRect, DT_LEFT, 0);
を
if Text <> '' then
begin
  Brush.Color := Color;
  DrawText(Handle, PChar(Text), Length(Text), CaptionRect, Flags);
end;
に変更します。


ThemeServices.DrawText を使わないようにしています。

これで動作させてみます。
再構築をしてコンパイルしてください。

色が変更されていますね。

Fontの色を変更してItalicやBoldを指定してみました。

※テーマ描画時もItalicやBoldの指定は反映され正しく動きます。



ユニット(つまり.pasファイル)は同一フォルダにある方が優先されるので
このように StdCtrls.pas の書き換えも非常に簡単です。


参考────────────────────
Delphi Q&A掲示板  XPスタイル表示でTGroupBoxのフォントカラーを設定するには?(Delphi2007)
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200801/08010055.txt