掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
XPスタイル表示時、コントロールの色を設定しても縁が描画されない (ID:29581)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
先日質問したばかりですが、XPスタイル表示についてまた質問があります。 フォーカスがセットされている時だけコンポーネントの色が変わるように、 TEditを拡張したコンポーネントを使用しています。 Windows2000でクラシック表示すると、フォーカスが来たときにEditの色が 指定した色になり、フォーカスが抜けた時にまたもとの色に戻ります。 XPスタイルで実行しても動作は同じですが、フォーカスが外れた時、Editの 縁の部分だけ、色が消えずに残ってしまいます。これを縁の部分まで正常に 表示させる方法はないでしょうか。 DelphiのバージョンやXPスタイル表示の方法にかかわらず、同じ現象が起こります。 コンポーネントのソースを抜粋すると、 //----------------------------------------------------------------------------- type TMyEdit = class(TEdit) private FBkColor: TColor; // 非フォーカス時のカラーバックアップ用 procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS; procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS; end; implementation // フォーカスがセットされた時、コントロールの色をclYellowに変更 procedure TMyEdit.WMSetFocus(var Msg: TWMSetFocus); begin inherited; if not (csDesigning in ComponentState) then begin FbkColor := Color; Color := clYellow; end; end; // フォーカスが離れる時、コントロールの色を元に戻す procedure TMyEdit.WMKillFocus(var Msg: TWMKillFocus); begin inherited; if not (csDesigning in ComponentState) then Color := FbkColor; end; //----------------------------------------------------------------------------- こんな感じです。 1つ気になるのは、フォーカスがあるEditの上にマウスカーソルが1度でも 乗ると、縁が残るようになり、縁が残っている状態でまたマウスカーソルを 乗せると縁が消えます。 つまり、KillFocus時にマウスカーソルが乗ったときの描画が再現できれば 縁も消えると思うんですが、それを再現させるコーディングが思いつきません。 マウスカーソルが乗るときのイベントはTControl.CMMouseEnterでいいかと 思うんですが... 細かすぎる質問で申し訳ありませんが、よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.