Windows7あたりまではWM_CTLCOLORSCROLLBARを捕まえることで
スクロールバーの背景色を変更することができたようですが、
今の環境(Windows10以降)ではできなくなってしまったようです。
妥協案ですが、スクロールバーをマウスホイールに対応させるというのは
どうでしょうか?
これならスクロールバーの位置をよく把握していなくてもスクロールができると思います。
以下、略して仮さんのモジュールを使っていて、かつ、
同サイトのサンプルプログラムに適用させた場合の例です。
まず、screen命令でウィンドウを作った後に、
(サンプルプログラムで言えば「screen 1,〜」の直後に)
以下を挿入します。
roll_total=0 //スクロールの合計量
oncmd gosub *wheel,0x020A //WM_MOUSEWHEEL = 0x020A
そのうえで、末尾に以下のサブルーチンを追加します。
*wheel
roll_total+=wparam>>16 : w_key=wparam&0xFFFF
//ホイールを上回転させた場合はroll_totalの値は増え、下回転させた場合は減る。
//一般的なマウスの場合は120ずつ増減する。
//w_keyには押されているキーの内容が入る。値については以下を参照。
//https://learn.microsoft.com/ja-jp/windows/win32/inputdev/wm-mousewheel
repeat
r_vec=0
if roll_total>=120 : r_vec=1 : roll_total-=120
if roll_total<=-120 : r_vec=-1 : roll_total+=120
if r_vec=0 : break
//ここには本処理を行う前にしておくべき処理を書く。
//たとえば、マウスの位置を調べて、範囲外だったらそのままreturnするとか。
gsel 1 //件のサンプルプログラムの場合はこれを実行しておく必要がある
//WM_VSCROLL、もしくはWM_HSCROLLを送ることで、
//モジュール内の「スクロールバーを動かした時の処理」が行われるように仕向ける。
//w_rollが正の値なら第3パラメータには0(SB_LINEUP)が、負の値なら1(SB_LINEDOWN)が入る。
//YBarIDの部分は、ご自身のプログラムのスクロールバーのIDにしてください。
sendmsg hwnd,0x0115,r_vec<0,objinfo(YBarID,2) //縦スクロールバーの場合は0x0115=WM_VSCROLL。横スクロールバーの場合は代わりに0x0114(WM_HSCROLL)を指定する。
//後処理が必要なら
gsel 0
loop
return
>syscolor命令で変えることができると書かれているのですが、変わりません。
>次のようにすれば良いようなのですが…
>color 255,0,0
>syscolor 0
syscolorは描画命令に用いる色を変更する命令であって(color命令と同種のもの)、
オブジェクトの色を変える命令ではありません。
たとえばこんな感じです。
//ウィンドウ全体を「スクロールバーの軸の色」に設定されている色で染める
syscolor 0 : boxf