TGroupBoxを貼り付けたプログラム(VCLフォームアプリ)をDelphi2007で
コンパイルし、WindowsXPでXPスタイル表示しようとすると、
TGroupBoxのCaptionのフォントカラーが青く(clBackground?)なって
しまいます。
TGroupBoxのParentFontプロパティとParentBackgroundプロパティは
Falseに設定しています。
同じプログラムをXPスタイルで表示しなければ、ちゃんと設定した
色になります。
XPスタイルにする方法は.manifestファイルを用いる方法と、
プロジェクトオプションでランタイムテーマを有効にする方法と、
XPManifestコンポーネントを貼り付ける方法がありますが、どの方法で
設定しても同じ結果になります。
また、同じものをDelphi5でコンパイルした場合は、.manifestファイル
を用いてXPスタイルで表示させても設定した色になります。
Delphi2007アプリでXPスタイルで表示しつつ、グループボックスの
フォントカラーを設定通りに表示できる方法はないでしょうか?
参考になるかどうかはわかりませんが,以下のような情報があります.
http://qc.borland.com/wc/qcmain.aspx?d=44063
Update3が出ていますので,もしかしたらとは思いますが,確認する環境が
ありませんので,何とも...
http://www.codegear.com/jp/downloads/regusers/delphi
Mr.XRAY様、回答ありがとうございます。
まさにこの現象ですね。
既存のバグで修正不可能、と言った感じでしょうか。
また、こちらの環境ではDecember Updateが適用されていますが、改善されていませんでした。
DelphiはXPテーマが採用された当初からいろいろ問題がありましたが、そろそろ
完全に動くようになって欲しいですね。
VCL の TGroupBox は、Windows の標準コントロールのラッパじゃなくて
VCL 独自の実装だから変になるんです。マニフェスト対応の純正標準
コントロールのラッパは、中村さんが
[Delphi-ML:63918] Re: manifest ファイルを使ったXP対応について
でつくっています。試してみてはどうでしょう。
えっと、
Windows の標準コントロールのラッパ
でも、GroupBoxの表示文字色はデフォルトで
clBackgroundの色になっているようですね。
VC++製アプリでもVCLのTGroupBoxでも同じ色です。
XPテーマ採用時には
FontColor指定よりテーマ描画優先になるということで
自然な実装なんじゃないでしょうか?
BDS2006だけど
GroupBoxの描画は
TCustomGroupBox の Paint で行なわれています
そして Paint で
if ThemeServices.ThemesEnabled then
で Manifest があるかどうか判断してある場合と無い場合で描画を分けています
Manifest ありのときの描画
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;
と書きえ変えればフォントの色を変化させる事はできますが・・・・
D5で色を変化するのは、GroupBox内でテーマ判定がなく単純に描画されているので
XPManifestがあってもフォントの色が変わるのでしょう
うんと様。
>[Delphi-ML:63918] Re: manifest ファイルを使ったXP対応について
のNkGroupBoxを使用してみましたが、フォントカラーは変更できませんでした。Fusa様の説明のとおりのようですね。
しかし、ParentBackgroundをFalseに設定してもフォントカラーを設定
できないのはちょっと不便ですね。些細なことですが。
どうしてもそれをやりたければ、KHE00221様のようにソースを改造するか、
GroupBoxを継承し、Paintメソッドだけオーバーライドしたものを作るしか
なさそうですね。
どうもありがとうございました。
TGroupBoxの含まれているVCLソースを
プロジェクトと同じフォルダにもってきて
ソース変更してコンパイルすれば
一番簡単そうですね。
がんばってください。
まとめてみました。
ご参考に。
VCLソースを変更してXP以降のテーマ対応時にGroupBoxのタイトル文字に色を付ける
http://delfusa.main.jp/delfusafloor/technic/technic/047_GroupBoxDrawCaption.html
ツイート | ![]() |