HSPでwinobjのスクロールバー(ウィンドウサイズに依存しない)

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