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
|