WM_CTLCOLOREDITが飛んできたときにSetBkColorとSetTextColorを使って色の変更をしていますよね。
ただ、
>色を変えるかのフラグをセット
しただけでは"エディットボックスを再描画しなさい"ってメッセージが飛んで来ません。
(WM_CTLCOLOREDIT が発生しません。)
そこで、ウィンドウ(エディットボックス)を再描画させる必要があります。
ウィンドウの再描画はいくつか方法があった気がしますが、win32apiの「InvalidateRect」を使うと良いと思います。
【参考】領域の消去と有効化
http://wisdom.sakura.ne.jp/system/winapi/win32/win35.html
// エディトコントロール内文字色&背景色変更サンプル (by Kpan)
#include "user32.as"
#include "gdi32.as"
#define ctype RGB(%1,%2,%3) (%1 | %2 << 8 | %3 << 16)
dim hInput, 2
a = "文字色&背景色を変えてみる1"
input a, 200
hInput.0 = objinfo(stat, 2)
b = "文字色&背景色を変えてみる2"
input b, 200
hInput.1 = objinfo(stat, 2)
wait 200
mes "set"
InvalidateRect hInput.0, 0, 1 ; ← ウィンドウの再描画
; エディットコントロールが描画されるときに送られてくる
; ウィンドウメッセージ (WM_CTLCOLOREDIT)
oncmd gosub *ctlcoloredit, $133
; 生成したカラーデータを破棄するための処理に必要
onexit *exit
; 背景カラー用のブラシを生成しハンドルを取得。
CreateSolidBrush RGB($FF, $00, $00)
hBrush.0 = stat
CreateSolidBrush RGB($FF, $00, $FF)
hBrush.1 = stat
stop
*ctlcoloredit
; lparamにオブジェクトのウィンドウハンドルが返る
if hInput.0 = lparam {
SetTextColor wparam, RGB($FF, $FF, $00)
; テキスト背景色 (hBrush.0と同色を指定)
SetBkColor wparam, RGB($FF, $00, $00)
; ボックス背景色
return hBrush.0
}
if hInput.1 = lparam {
SetTextColor wparam, RGB($00, $FF, $00)
; テキスト背景色 (hBrush.1と同色を指定)
SetBkColor wparam, RGB($FF, $00, $FF)
return hBrush.1
}
return
*exit
; 作成した背景カラー用のブラシを破棄
DeleteObject hBrush.1
DeleteObject hBrush.0
end
;Kpanさんの「入力ボックス/メッセージボックの表示色変更」をほぼそのまま流用させてもらいました。
;http://lhsp.s206.xrea.com/hsp_object2.html