XPスタイル表示でTGroupBoxのフォントカラーを設定するには?(Delphi2007)

解決


ヌル山  2008-01-23 11:25:39  No: 29448  IP: 192.*.*.*

TGroupBoxを貼り付けたプログラム(VCLフォームアプリ)をDelphi2007で
コンパイルし、WindowsXPでXPスタイル表示しようとすると、
TGroupBoxのCaptionのフォントカラーが青く(clBackground?)なって
しまいます。
TGroupBoxのParentFontプロパティとParentBackgroundプロパティは
Falseに設定しています。
同じプログラムをXPスタイルで表示しなければ、ちゃんと設定した
色になります。
XPスタイルにする方法は.manifestファイルを用いる方法と、
プロジェクトオプションでランタイムテーマを有効にする方法と、
XPManifestコンポーネントを貼り付ける方法がありますが、どの方法で
設定しても同じ結果になります。
また、同じものをDelphi5でコンパイルした場合は、.manifestファイル
を用いてXPスタイルで表示させても設定した色になります。

Delphi2007アプリでXPスタイルで表示しつつ、グループボックスの
フォントカラーを設定通りに表示できる方法はないでしょうか?

編集 削除
Mr.XRAY  2008-01-24 23:03:43  No: 29449  IP: 192.*.*.*

参考になるかどうかはわかりませんが,以下のような情報があります.

http://qc.borland.com/wc/qcmain.aspx?d=44063

Update3が出ていますので,もしかしたらとは思いますが,確認する環境が
ありませんので,何とも...

http://www.codegear.com/jp/downloads/regusers/delphi

編集 削除
ヌル山  2008-01-25 14:47:04  No: 29450  IP: 192.*.*.*

Mr.XRAY様、回答ありがとうございます。
まさにこの現象ですね。
既存のバグで修正不可能、と言った感じでしょうか。
また、こちらの環境ではDecember Updateが適用されていますが、改善されていませんでした。
DelphiはXPテーマが採用された当初からいろいろ問題がありましたが、そろそろ
完全に動くようになって欲しいですね。

編集 削除
うんと  2008-01-25 16:01:00  No: 29451  IP: 192.*.*.*

VCL の TGroupBox は、Windows の標準コントロールのラッパじゃなくて
VCL 独自の実装だから変になるんです。マニフェスト対応の純正標準
コントロールのラッパは、中村さんが

[Delphi-ML:63918] Re: manifest ファイルを使ったXP対応について

でつくっています。試してみてはどうでしょう。

編集 削除
Fusa  URL  2008-01-25 17:57:15  No: 29452  IP: 192.*.*.*

えっと、
Windows の標準コントロールのラッパ
でも、GroupBoxの表示文字色はデフォルトで
clBackgroundの色になっているようですね。

VC++製アプリでもVCLのTGroupBoxでも同じ色です。

XPテーマ採用時には
FontColor指定よりテーマ描画優先になるということで
自然な実装なんじゃないでしょうか?

編集 削除
KHE00221  URL  2008-01-25 18:52:21  No: 29453  IP: 192.*.*.*

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があってもフォントの色が変わるのでしょう

編集 削除
ヌル山  2008-01-28 15:43:56  No: 29454  IP: 192.*.*.*

うんと様。
>[Delphi-ML:63918] Re: manifest ファイルを使ったXP対応について
のNkGroupBoxを使用してみましたが、フォントカラーは変更できませんでした。Fusa様の説明のとおりのようですね。
しかし、ParentBackgroundをFalseに設定してもフォントカラーを設定
できないのはちょっと不便ですね。些細なことですが。
どうしてもそれをやりたければ、KHE00221様のようにソースを改造するか、
GroupBoxを継承し、Paintメソッドだけオーバーライドしたものを作るしか
なさそうですね。

どうもありがとうございました。

編集 削除
Fusa  2008-01-28 17:32:30  No: 29455  IP: 192.*.*.*

TGroupBoxの含まれているVCLソースを
プロジェクトと同じフォルダにもってきて
ソース変更してコンパイルすれば
一番簡単そうですね。

がんばってください。

編集 削除
Fusa  URL  2008-01-30 09:12:36  No: 29456  IP: 192.*.*.*

まとめてみました。
ご参考に。

VCLソースを変更してXP以降のテーマ対応時にGroupBoxのタイトル文字に色を付ける
http://delfusa.main.jp/delfusafloor/technic/technic/047_GroupBoxDrawCaption.html

編集 削除