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 // 41
gosub *draw
}
loop
return
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX