〜 グラフィック 〜
画像カーソルを使用

ツールソフトではあまり使わないかもしれませんが、ゲームでは使いたい場合が多いかもしれません。
マウスカーソルの代わりに画像を用いて独自のカーソルを表示させるサンプルです。
上記でわかる通り、マウスカーソル位置に画像を表示しているだけであるために、
ボタンなどのオブジェクト上に移動させると表示させることができません。
下記のサンプルモジュールでは、画像カーソルの使用エリアを制限することが出来ますので、
もし、オブジェクトも配置する場合は、画像カーソル使用対象外の位置に配置すると良いでしょう。
尚、サンプルではコチラのカーソル画像を使用しています。
スクリプトを変更せずに実行する場合は、コチラからダウンロードするか同名ファイルを用意してください。
	
gcurinit カーソル画像, 一時使用ID, X座標, Y座標, 赤輝度, 緑輝度, 青輝度
カーソル画像カーソルとして利用する画像ファイルパスを指定する。
一時使用IDカーソル画像の読込先バッファを指定する。
X座標画像内のポインタX座標を指定する。
Y座標画像内のポインタY座標を指定する。
赤輝度カーソルが画像サイズの矩形ではない場合、透過する赤輝度を指定する。
緑輝度カーソルが画像サイズの矩形ではない場合、透過する緑輝度を指定する。
青輝度カーソルが画像サイズの矩形ではない場合、透過する青輝度を指定する。
gcurdraw 左上X座標, 左上Y座標, 右下X座標, 右下Y座標
左上X座標画像カーソルを描画する矩形の左端座標を指定する。
左上Y座標画像カーソルを描画する矩形の上端座標を指定する。
右下X座標画像カーソルを描画する矩形の右端座標を指定する。
右下Y座標画像カーソルを描画する矩形の下端座標を指定する。
 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#module
#deffunc gcurinit str, int, int, int, int, int, int
	mref file, 32 : mref id, 1 : mref x, 2 : mref y, 3 : mref r, 4 : mref g, 5 : mref b, 6
	tmpwin = id
	px = x : py = y
	tr = r : tg = g : tb = b
	mref bmscr, 67
	// アクティブウィンドウ取得
	actwin = bmscr.18
	wx = winx : wy = winy
	// 画像のサイズ取得用
	buffer tmpwin
	picload file
	sx = winx : sy = winy
	buffer tmpwin, (wx > sx) * wx + ((wx <= sx) * sx), (wy > sy) * wy + ((wy <= sy) * sy) + sy
	// カーソルロード
	picload file, 1
	pos 0, sy : gcopy actwin, , , wx, wy
	gsel actwin
	draw = 0
	return

#deffunc gcurdraw int, int, int, int
	mref left, 0
	mref top, 1
	mref right, 2
	mref bottom, 3
	// アクティブウィンドウチェック
	ginfo 1
	if prmx != actwin : return
	// 座標をチェックし、動いてないなら再描画しない
	mx = mousex : my = mousey
	if mx = mx.1 & (my = my.1) : return
	// 一旦カーソルを削除
	redraw 0
	if draw : pos mx.1, my.1 : gcopy tmpwin, mx.1, my.1 + sy, sx, sy
	// 描画範囲外
	if left > mx | (top > my) | (right < mx) | (bottom < my) {
		if draw {
			draw = 0
			mouse
		}
	// 描画範囲内
	} else {
		mx.1 = mx + px : my.1 = my + py
		if draw = 0 : draw = 1 : mouse -1 : color tr, tg, tb : gmode 4, sx, sy, 256
		pos mx + px, my + py : gcopy tmpwin
	}
	redraw 1
	return
#global

	picload "sample/hspdx/hspdx.bmp"
	area = 200, 100, 500, 300
	color 200, 200, 100 : boxf area.0, area.1, area.2, area.3 // カーソル使用エリアを色づけ
	gcurinit "gcur.bmp", 2, 1, 1, 128, 128, 128
	repeat
		title "" + mousex + ", "+ mousey
		gcurdraw area.0, area.1, area.2, area.3
		wait 1
	loop
gcurinit カーソル画像, 一時使用ID, X座標, Y座標, 赤輝度, 緑輝度, 青輝度
カーソル画像カーソルとして利用する画像ファイルパスを指定する。
一時使用IDカーソル画像の読込先バッファを指定する。
X座標画像内のポインタX座標を指定する。
Y座標画像内のポインタY座標を指定する。
赤輝度カーソルが画像サイズの矩形ではない場合、透過する赤輝度を指定する。
緑輝度カーソルが画像サイズの矩形ではない場合、透過する緑輝度を指定する。
青輝度カーソルが画像サイズの矩形ではない場合、透過する青輝度を指定する。
gcurdraw 左上X座標, 左上Y座標, 右下X座標, 右下Y座標
左上X座標画像カーソルを描画する矩形の左端座標を指定する。
左上Y座標画像カーソルを描画する矩形の上端座標を指定する。
右下X座標画像カーソルを描画する矩形の右端座標を指定する。
右下Y座標画像カーソルを描画する矩形の下端座標を指定する。
 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#module
#deffunc gcurinit str file, int id, int x, int y, int r, int g, int b, local wx, local wy
	tmpwin = id
	px = x : py = y
	tr = r : tg = g : tb = b
	// アクティブウィンドウ取得
	actwin = ginfo_act
	wx = ginfo_winx : wy = ginfo_winy
	// 画像のサイズ取得用
	buffer tmpwin
	picload file
	sx = ginfo_winx : sy = ginfo_winy
	buffer tmpwin, (wx > sx) * wx + ((wx <= sx) * sx), (wy > sy) * wy + ((wy <= sy) * sy) + sy
	// カーソルロード
	picload file, 1
	pos 0, sy : gcopy actwin, , , wx, wy
	gsel actwin
	draw = 0
	dim mx, 2 : dim my, 2
	return

#deffunc gcurdraw int left, int top, int right, int bottom
	// アクティブウィンドウチェック
	if ginfo(2) != actwin : return
	// 座標をチェックし、動いてないなら再描画しない
	mx = mousex : my = mousey
	if mx = mx.1 & my = my.1 : return
	// 一旦カーソルを削除
	redraw 0
	if draw : pos mx.1, my.1 : gcopy tmpwin, mx.1, my.1 + sy, sx, sy
	// 描画範囲外
	if left > mx | top > my | right < mx | bottom < my {
		if draw {
			draw = 0
			mouse
		}
	// 描画範囲内
	} else {
		mx.1 = mx + px : my.1 = my + py
		if draw = 0 : draw = 1 : mouse -1 : color tr, tg, tb : gmode 4, sx, sy, 256
		pos mx + px, my + py : gcopy tmpwin
	}
	redraw 1
	return
#global

	picload "sample/hspdx/hspdx.bmp"
	area = 200, 100, 500, 300
	color 200, 200, 100 : boxf area.0, area.1, area.2, area.3 // カーソル使用エリアを色づけ
	gcurinit "gcur.bmp", 1, 1, 1, 128, 128, 128
	repeat
		title "" + mousex + ", "+ mousey
		gcurdraw area.0, area.1, area.2, area.3
		wait 1
	loop