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