ページ 11

文字色

Posted: 2006年5月06日(土) 21:22
by 今ランエボにエアロを..
MainWndのEditBox1のフォント色をカラーダイアログで指定できるように
する機能がほしいのですが、わたしは初心者のため解説とソースを教えていただけませんか。初心者のくせにすみません。

Re: 文字色

Posted: 2006年5月06日(土) 23:19
by 7
> MainWndのEditBox1のフォント色をカラーダイアログで指定できるように
> する機能がほしいのですが、わたしは初心者のため解説とソースを教えていただけませんか。初心者のくせにすみません。
「カラーダイアログ」とか「エディットボックスのフォント色」って検索しましたか?
検索すると分かりますけど、検索するだけで答えが分かることも多々ありますよ。

それでは。

まず、カラー選択ダイアログを表示するにはChooseColor()関数を使います。
グローバル領域(モジュールレベル)でDWord型変数 rgb を宣言しておいてください。 次はエディットボックスの文字色を変更します。
ウィンドウメッセージを監視して、WM_CTLCOLOREDITが送られたことが分かればエディットボックスの文字色を変更できます。
これはコールバック関数を改造するだけで済みます。 カラー選択ダイアログで色を取得した直後も文字色を変更しようとして、デバイスコンテキストのハンドルとエディットボックスのハンドルを指定したWM_CTLCOLOREDITを送信したんですけど、変わりませんね...。
あとWM_CTLCOLOREDITの処理が終わった後、何も返さずに関数を抜けてるので何か問題があるかもしれません。何も問題ないかもしれません。

ここら辺は宿題でしょうか。

無効..??what//.

Posted: 2006年5月11日(木) 22:59
by 今ランエボにエアロを..
"rgb" 無効な識別子です

と出るのですが、何かの変数がかけてるっポくて何を書き込んだらよろしいでしょうか。

また、解説とソースをお願いします。 (反省)

Re: 無効..??what//.

Posted: 2006年5月11日(木) 23:24
by 7
> 何かの変数がかけてるっポくて何を書き込んだらよろしいでしょうか。
グローバル領域(モジュールレベル)でDWord型変数 rgb を宣言しておいてください。
ちゃんと書いておいたんですけどね。
ということで下のように書きます。

コード: 全て選択

Dim rgb As DWord

Re: 文字色

Posted: 2006年5月12日(金) 01:01
by Tomorrow
7 さんが書きました:> カラー選択ダイアログで色を取得した直後も文字色を変更しようとして、デバイスコンテキストのハンドルとエディットボックスのハンドルを指定したWM_CTLCOLOREDITを送信したんですけど、変わりませんね...。
InvalidateRect()でエディットボックスを再描画してやると変わります。
7 さんが書きました:> あとWM_CTLCOLOREDITの処理が終わった後、何も返さずに関数を抜けてるので何か問題があるかもしれません。何も問題ないかもしれません。
ブラシハンドルを返すと余白の部分(テキスト部分の背景は除く)が、そのブラシの色になります。何も返さないとABの仕様上0が返ると考えられる(Function名の変数を0で初期化?)から、無効なハンドルということでデフォルト値(白)になるのでしょう。

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

Posted: 2006年5月13日(土) 02:16
by 今ランエボにエアロを..
またわからんことがありまして、今度は文字色ではなくEditBoxの色をカラー
ダイアログで選択する機能をつけたいのですが。どうすれば前回同様

ソースをお願いします。あとは自分でやりますので。

Re: ありがとうございました。

Posted: 2006年5月13日(土) 17:57
by 7
> またわからんことがありまして、今度は文字色ではなくEditBoxの色をカラー
> ダイアログで選択する機能をつけたいのですが。どうすれば前回同様
前回同様、「エディットボックスのフォント色」とか「WM_CTLCOLOREDIT」って検索しましたか?
文字色を変更する方法と背景色を変更する方法が1ページにまとまっているサイトが多く見受けられます。
初心者だから検索ができないって訳じゃ、ないですよね?。

背景色はSetBkColor()関数でパッと、と思ったらそうでもなくてちゃんとブラシを用意しなくてはならないようです。
Tomorrowさん さんが書きました:InvalidateRect()でエディットボックスを再描画してやると変わります。
なるほど!InvalidateRect(インバリデートレクトと呼んでます)を使うんですね。
使う時は使うんですけど、思い付きませんでした...。

そうすると../

Posted: 2006年5月14日(日) 01:21
by 今ランエボにエアロを..
何か、背景ではなくカーソル行の背景色になってしまって
EditBox全体の色を変えるにはどうすればできますかね。

ヘルプで検索しても関係無いものしか出てこなくて。
本当にいろいろと聞いてすみません。

お願いします。

Re: そうすると../

Posted: 2006年5月14日(日) 08:21
by 7
> 何か、背景ではなくカーソル行の背景色になってしまって
> EditBox全体の色を変えるにはどうすればできますかね。
あー。手抜きコードだったので疎かになってる処理を見て出来てないって思ったんでしょうね。たぶん...。
とりあえず自分はChooseColor()関数が成功した場合、ちゃんとエディットボックスの背景色が変わります。

起動時、一行目だけが黒の背景色になりますけど、これは背景色を任意の値に初期化してないからです。

文字の背景色を持つ変数を宣言する時に適当な値に初期化してください。

コード: 全て選択

Dim rgbBack=RGB(255,255,255) As DWord	' 文字の背景色は白
> ヘルプで検索しても関係無いものしか出てこなくて。
ヘルプには関数の説明は載ってますけど、ダイレクトな解決策は書かれていません。
ヘルプを片っ端からじっくりと眺めてても解決することがあるんですけど、GoogleでググったりYahooでヤフったり(?)した方がいいですよ。