#module
#deffunc gload str, int, int, int
mref file, 32 : mref id, 1 : mref x, 2 : mref y, 3
mref bmscr, 67
// 現ウィンドウ情報取得
nx = winx : ny = winy
actid = bmscr.18 // ウィンドウID
// サイズ取得用の仮読み
buffer id
picload file
wx = winx : wy = winy
// 画像と現ウィンドウ幅の大きい方のサイズでバッファ作成
buffer id, (wx > nx) * wx + ((wx <= nx) * nx), wy + ny
gcopy actid, , , nx, ny
picload file, 1, , ny
gsel actid
px = x : py = y // 画像配置初期座標
tmpid = id // 一時バッファID取得
pos px, py : gcopy tmpid, , ny, wx, wy
return
#deffunc gmove
x = mousex : y = mousey
wait 1
// クリックされていないなら終了
stick key, 256, 1
if (key & 256) = 0 : return
// 対象ウィンドウではないなら終了
ginfo 1
if prmx != actid : return
// 画像範囲外なら終了
if px > x | (px + wx < x) | (py > y) | (py + wy < y) : return
x = mousex - x : y = mousey - y
// マウスが動かされているなら画像移動
if x | y {
pos 0, 0 : gcopy tmpid, , , nx, ny // 一旦画像を消去
px += x : py += y
pos px, py : gcopy tmpid, , ny, wx, wy // 移動先に画像を表示
}
return
#global
// 適当な背景(クリアされてないかのチェック用)
picload "sample/hspdx/hspdx.bmp"
// ウィンドウID2に画像をロード
gload "sample/ssaver/Aruface.bmp", 2, 50, 50
// ループでドラッグ移動を監視
repeat
redraw 0
gmove // ドラッグ移動チェック(ループ側にウェイトは不要)
redraw 1
loop
|