〜 オブジェクト 〜
配置済オブジェクトの位置・サイズ取得 (要USER32.DLL)

配置するオブジェクトの位置やサイズはプログラマーがスクリプトに書くわけで、
後でそれらの情報が必要な場合、情報保持用の変数に入れておけばいつでも参照することができますが、
モジュール内で配置済みオブジェクト情報を扱う場合に、グローバル領域にアクセスするのは問題外ですし、
オブジェクト情報を保持した変数をパラメータとして渡す仕様も不恰好過ぎます。
オブジェクトの情報を扱う段階ではまったく知らない状態であっても、
API関数GetWindowRectを利用すれば知ることが可能ですのでサンプルを参考に載せておきます。
また、GetWindowRectで得たRECT構造体はディプレイ左上を基点にしたスクリーン座標となっているので、
HSPウィンドウの描画(クライアント)領域を貴店に変換するAPI関数ScreenToClientも使用しています。
	

getobjinfo 格納配列, オブジェクトID
格納配列取得情報の格納配列(0:位置X 1:位置Y 2:横幅 3:高さ)を指定する。
オブジェクトID取得対象オブジェクトID指定する。

 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
	ll_libload user, "user32.dll"
	ll_getproc GetWindowRect, "GetWindowRect", user
	ll_getproc ScreenToClient, "ScreenToClient", user

#module
#deffunc getobjinfo val, int
	mref inf, 48 : mref id, 1
	mref bmscr, 67
	ll_getptr inf : ll_ret ptr
	id += 41
	prm = bmscr.id, ptr
	ll_callfunc prm, 2, GetWindowRect@
	inf.2 = inf.2 - inf.0, inf.3 - inf.1
	prm = bmscr.13, ptr
	ll_callfunc prm, 2, ScreenToClient@
	return
#global

	sdim s, 128
	dim data, 4
	repeat 5
		if s ! "" : s += "\n"
		s += "オブジェクトID" + cnt + "の情報"
	loop
	buf = "もうかりまっか?\nボチボチでんな"
	objsize 220
	pos 10, 10 : mes "ID:0"
	pos 60, 10 : combox index, 100, s
	objsize 50, 20
	pos 300, 10 : mes "ID:1"
	pos 350, 10 : button "確認", *check
	objsize 120
	pos 50, 150 : mes "ID:2"
	pos 100, 150 : listbox index.1, 80, "米ドル\nポンド\nユーロ\nクローネ\nリラ\nランド"
	objsize 200, 100
	pos 300, 70 : mes "ID:3"
	pos 350, 70 : mesbox buf
	objsize 100, 30
	pos 200, 320 : mes "ID:4"
	pos 250, 320 : chkbox "虫が嫌い", index.2
	stop

*check
	getobjinfo data, index
	dialog "位 置 " + data.0 + " , " + data.1 + "\nサイズ " + data.2 + " , " + data.3
	stop

getobjinfo 格納配列, オブジェクトID
格納配列取得情報の格納配列(0:位置X 1:位置Y 2:横幅 3:高さ)を指定する。
オブジェクトID取得対象オブジェクトID指定する。

 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
#uselib "user32.dll"
#func  global GetWindowRect "GetWindowRect" int, var
#func  global ScreenToClient "ScreenToClient" int, var

#module
#deffunc getobjinfo array inf, int id
	GetWindowRect objinfo(id, 2), inf
	inf.2 = inf.2 - inf.0, inf.3 - inf.1
	ScreenToClient hwnd, inf
	return
#global

	sdim s, 128
	dim data, 4
	repeat 5
		if s ! "" : s += "\n"
		s += "オブジェクトID" + cnt + "の情報"
	loop
	buf = "もうかりまっか?\nボチボチでんな"
	objsize 150, 20
	pos 10, 10 : mes "ID:0"
	pos 60, 10 : combox index, 100, s
	objsize 50, 20
	pos 250, 10 : mes "ID:1"
	pos 300, 10 : button "確認", *check
	objsize 80
	pos 50, 150 : mes "ID:2"
	pos 100, 150 : listbox index.1, 80, "米ドル\nポンド\nユーロ\nクローネ\nリラ\nランド"
	objsize 200, 100
	pos 300, 70 : mes "ID:3"
	pos 350, 70 : mesbox buf
	objsize 100, 30
	pos 200, 320 : mes "ID:4"
	pos 250, 320 : chkbox "虫が嫌い", index.2
	stop

*check
	getobjinfo data, index
	dialog "位 置 " + data.0 + " , " + data.1 + "\nサイズ " + data.2 + " , " + data.3