HSPでwinobjを使ってスクロールバーのサンプルを探していたが
何故かどこ探しても可変ウィンドウにスクロールバーをくっつけるタイプの情報しか見つからなかったので作成。
ただ単にスクロールバーだけが欲しい時用。
Windows10 1909でのみ動作確認。
HSPでwinobjを使ってスクロールバーのサンプルを探していたが
何故かどこ探しても可変ウィンドウにスクロールバーをくっつけるタイプの情報しか見つからなかったので作成。
ただ単にスクロールバーだけが欲しい時用。
Windows10 1909でのみ動作確認。
#include "user32.as"
scroll_min = 0 // 最小値
scroll_max = 100 // 最大値
scroll_size = 33 // バーの大きさ
scroll_pos = 10 // バーの位置(最大値=scroll_max-scroll_size+1)
lpsi = 28, 0x1f, scroll_min, scroll_max, scroll_size, scroll_pos, 0
dim h, 2
// 横スクロールバー
pos 10, 10 : winobj "SCROLLBAR","",0,0x50000000,200, 20
h(0) = objinfo(stat, 2)
SetScrollInfo h(0), 0x2, varptr(lpsi), 0
// 縦スクロールバー
pos 220, 10 : winobj "SCROLLBAR","",0,0x50000001,20, 200
h(1) = objinfo(stat, 2)
SetScrollInfo h(1), 0x2, varptr(lpsi), 0
oncmd gosub *scroll, 0x0114 //横スクロールのメッセージはこっち
oncmd gosub *scroll, 0x0115 //縦スクロールのメッセージはこっち
stop
// スクロールバーの情報表示
*draw
redraw 0
color 255, 255, 255 : boxf 10,80,150,220
color 0: pos 10, 80
if h_scroll == h(0) : mes "横スクロール" : else : mes "縦スクロール"
// 最小/最大/大きさ/位置
repeat length(lpsi)-3, 2
mes lpsi(cnt)
loop
redraw 1
return
// スクロールバーを操作
*scroll
h_scroll = lparam
// 縦横2つ分チェック
repeat 2
if h_scroll == h(cnt) {
mode = wparam & 0xFF
value = (wparam >> 8) & 0xFF
// 現在位置を取得して更新
lpsi = 28, 0x1f, 0, 0, 0, 0, 0
GetScrollInfo h_scroll, 0x2, varptr(lpsi)
if mode == 0{ // 左ボタン
lpsi(5) -= 1
} else:if mode == 1 { // 右ボタン
lpsi(5) += 1
} else:if mode == 2 { // 左の隙間をクリック
lpsi(5) -= scroll_size
} else:if mode == 3 { // 右の隙間をクリック
lpsi(5) += scroll_size
} else:if mode == 5 { // バーを操作
lpsi(5) = lpsi(6)
}
if lpsi(5) < scroll_min : lpsi(5) = scroll_min
if lpsi(5) > scroll_max : lpsi(5) = scroll_max
SetScrollInfo h_scroll, 0x2, varptr(lpsi), 1 // 第4引数は1にしないとクリックを離すまで表示が反映されない
gosub *draw
}
loop
return