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, 0dim h, 2// 横スクロールバーpos 10, 10 : winobj "SCROLLBAR","",0,0x50000000,200, 20h(0) = objinfo(stat, 2)SetScrollInfo h(0), 0x2, varptr(lpsi), 0// 縦スクロールバーpos 220, 10 : winobj "SCROLLBAR","",0,0x50000001,20, 200h(1) = objinfo(stat, 2)SetScrollInfo h(1), 0x2, varptr(lpsi), 0oncmd gosub *scroll, 0x0114 //横スクロールのメッセージはこっちoncmd gosub *scroll, 0x0115 //縦スクロールのメッセージはこっちstop// スクロールバーの情報表示*drawredraw 0color 255, 255, 255 : boxf 10,80,150,220color 0: pos 10, 80if h_scroll == h(0) : mes "横スクロール" : else : mes "縦スクロール"// 最小/最大/大きさ/位置repeat length(lpsi)-3, 2mes lpsi(cnt)loopredraw 1return// スクロールバーを操作*scrollh_scroll = lparam// 縦横2つ分チェックrepeat 2if h_scroll == h(cnt) {mode = wparam & 0xFFvalue = (wparam >> 8) & 0xFF// 現在位置を取得して更新lpsi = 28, 0x1f, 0, 0, 0, 0, 0GetScrollInfo 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_minif lpsi(5) > scroll_max : lpsi(5) = scroll_maxSetScrollInfo h_scroll, 0x2, varptr(lpsi), 1 // 第4引数は1にしないとクリックを離すまで表示が反映されないgosub *draw}loopreturn