〜 インプット 〜
マウスの移動可能領域を制限 (要USER32.DLL)

通常、マウスはディスプレイの端から反対側の端まで自由に移動させることができますが、
一定の領域から外に出られてはマズいという場合もあります。
このサンプルモジュールは、そのようなディスプレイ左上を基点とした任意の矩形だけを移動可能範囲として、
その他はマウスカーソルを移動させなくするものです。
サンプルで使用しているのは移動を制限するAPI関数ClipCursorで、
現在の移動可能範囲を知るには別途コチラのTipsを参照してください。

HSP終了時には制限された移動領域はディスプレイ全体へと戻るはずですが、
念のために解除プログラムを組み込んでおくほうがいいかもしれません。
尚、サンプルモジュールでは上下左右すべてのパラメータに0をセット、または省略することで
座標(0,0)に固定するのではなく、解除する用に設定しています。
また、サンプルではウィンドウをタイトルバーなしのbgscr命令で作成しているので大丈夫ですが、
通常のウィンドウは、タイトルバーをドラッグすることにより、ウィンドウの表示位置を変更出来るので、
ウィンドウ内だけを移動可能範囲に設定するとおかしくなってしまいますので注意してください。
	

mousebind 基点X座標, 基点Y座標, 終点X座標, 終点Y座標
基点X座標移動可能領域左端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。
基点Y座標移動可能領域上端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。
終点X座標移動可能領域右端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。
終点Y座標移動可能領域下端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
	ll_libload user, "user32.dll"
	ll_getproc ClipCursor, "ClipCursor", user

#module
#deffunc mousebind int, int, int, int
	mref left, 0 : mref top, 1 : mref right, 2 : mref bottom, 3
	i = left, top, right, bottom
	if i.0 ! 0 | (i.1 ! 0) | (i.2 ! 0) | (i.3 ! 0) {
		ll_getptr i
		ll_ret rect
	} else {
		rect = 0
	}
	ll_callfunc rect, 1, ClipCursor@
	return
#global

	sdim msg, 10, 2
	msg = "制限する", "解除する"
	area = 200, 100, 400, 300
	bgscr 2, area.2 - area.0, area.3 - area.1, , area.0, area.1
	color 200, 100, 200 : boxf
	objsize 80, 20
	pos 10, 10 : button "", *binding
	pos 10, 40 : button "終了", *exit
	onexit *exit

*binding
	bflg = 1 - bflg
	objprm 0, msg.bflg
	mousebind bflg * area.0, bflg * area.1, bflg * area.2, bflg * area.3
	stop

*exit
	mousebind // 終了時には自動的に解除されるが念のため、解除処理を入れておく

mousebind 基点X座標, 基点Y座標, 終点X座標, 終点Y座標
基点X座標移動可能領域左端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。
基点Y座標移動可能領域上端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。
終点X座標移動可能領域右端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。
終点Y座標移動可能領域下端の座標を指定する。尚、すべてのパラメータを0にすると解除とする。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#uselib "user32.dll"
#func  global ClipCursor "ClipCursor" int

#module
#deffunc mousebind int left, int top, int right, int bottom, local i
	i = left, top, right, bottom
	ClipCursor (i.0 ! 0 | i.1 ! 0 | i.2 ! 0 | i.3 ! 0) * varptr(i)
	return
#global

	msg = "制限する", "解除する"
	area = 200, 100, 400, 300
	bgscr 0, area.2 - area.0, area.3 - area.1, , area.0, area.1
	color 200, 100, 200 : boxf
	objsize 80, 20
	pos 10, 10 : button "", *binding
	pos 10, 40 : button "終了", *exit
	onexit *exit

*binding
	bflg = 1 - bflg
	objprm 0, msg.bflg
	mousebind bflg * area.0, bflg * area.1, bflg * area.2, bflg * area.3
	stop

*exit
	mousebind // 終了時には自動的に解除されるが念のため、解除処理を入れておく
	end