〜 オブジェクト 〜
ボタンに貼り付けられた画像情報を取得

HSP3.2から標準命令でボタンに画像を貼り付けることが可能になりました。
HSP3.1以前でも貼ることは可能でしたが、単純にボタンの表面に貼るだけでした。
HSP3.2で追加されたobjimage命令を使用すると、ボタンに画像を貼るのはもちろん、
ボタン押下時の画像、マウスオーバー時の画像の3パターンを使用するカスタムボタンを設置可能。
それもHSP3.1までのモジュールやAPI関数を呼び出すような処理を必要とせず、
標準命令だけで配置できますし、ボタンキャプション(ボタン上のテキスト)はそのまま表示されるので、
非常に扱いやすいものとなっています。
画像が設定されるボタンは1つだけでなく、objimage命令で設定している限りは設定が有効で、
同一スクリーンに限り、全てのボタンが指定したカスタムボタンとして配置されます。
ウィンドウ毎に保存しているBMSCR構造体で管理されているので
objimage命令の詳細は別で行うとしてココから取得するモジュール命令を用意しました。
尚、objimage命令で現在設定されている情報はBMSCR構造体数値配列の要素79〜82です。
カスタムボタン格納ウィンドウID、カスタムボタン位置、押下時位置、マウスオーバー位置のうち、
XY項目はそれぞれ2バイト幅で格納されているので、サンプルのように取り出してください。
	

bsel ウィンドウID
ウィンドウIDカスタムボタン情報取得元のウィンドウIDを指定する

ウィンドウID = cbgetid()
ウィンドウID使用しているウィンドウIDの受取先を指定する。
尚、カスタムボタン用のバッファを使用していない場合は−1が返る。
[パラメータなし]使用しているウィンドウIDを返すだけなのでパラメータは必要ない。

サイズ = cbgetpos(方向フラグ, 状態)
サイズピクセル単位の取得したサイズ受取先を指定する
方向フラグサイズの取得する方向(0:X 1:Y)を指定する
状態カスタムボタンの状態(0:通常 1:押下時 2:マウスオーバー時)を指定する

 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
#module
#deffunc bsel int id
	mref bmscr, id + 96
	return

#defcfunc cbgetid
	if bmscr = 0 : return : else : return bmscr.79

#defcfunc cbgetpos int direction, int state, local i
	if bmscr = 0 : return
	i = limit(state, 0, 2) + 80
	if direction : return bmscr.i >> 16 : else : return bmscr.i & 0xFFFF
#global

	size = 320, 80
	help = "ノーマル", "ボタン押下", "マウスオーバー"
	buffer 1
	font msmincho, 12
	repeat 3
		color (cnt = 0) * 100 + 155, (cnt = 1) * 100 + 155, (cnt = 2) * 100 + 155
		boxf , cnt * size.1, size.0, (cnt + 1) * size.1
		color (cnt = 0) * -200 + 255, (cnt = 1) * -200 + 255, (cnt = 2) * -200 + 255
		pos 10, (cnt + 1) * size.1 - 20 : mes help.cnt
	loop
	gsel 0
	font msgothic, 25, 1
	objsize size.0, size.1
	objmode 2
	objimage 1, , size.1 * 0, , size.1 * 1, , size.1 * 2
	pos 50, 50 : button gosub "情 報 表 示", *info
	bsel 0 // ウィンドウID0のカスタムボタン情報を取得
	stop

*info
	sdim s, 128
	repeat 3
		s += "\n" + help.cnt + "時の座標" + strf("(%d, %d)", cbgetpos(0, cnt), cbgetpos(1, cnt))
	loop
	dialog "使用ウィンドウID:" + cbgetid() + s
	return