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

既に配置したオブジェクトの中身(テキストやチェック状態など)は、objprm命令で変更できますが、
オブジェクトの位置やサイズを変更する命令は標準で用意されていません。
API関数で取得する方法を紹介しましたが、位置やサイズを再編集もAPI関数を使うことで行えます。
API関数にはSetWindowRectSetWindowPosMoveWindowなどが利用できますが、
SetWindowRectはディスプレイ左上を基点としたスクリーン座標で扱う必要があり、
HSPウィンドウ内の左上を基点としたクライアント領域座標から変換する手間が増えるので、
当サンプルではクライアント座標で指定するSetWindowPosで行っています。
SetWindowPosでは動作フラグも設定可能となっており、
位置だけ変更する(サイズは変更しない)時は「SWP_NOSIZE(=0x0001)」を、
サイズだけ変更する(位置は変更しない)時は「SWP_NOMOVE(=0x0002)」を指定できるので、
いちいち変更しない側の位置・サイズ情報を取得する必要はありません。
動作フラグに−1を指定するとスタイルのみの変更モードとして動作するようにしています。
スタイルのみの変更例はコチラ等を参照してください。
SetWindowPosではなくSetWindowRectで変更する場合のクライアント座標からスクリーン座標変換処理は、
API関数のClientToScreenを利用しましょう。
尚、当モジュールはオブジェクトID1000未満は通常オブジェクト、
1000以上はハンドルとみなし拡張オブジェクトとして
HSP通常オブジェクトでも拡張オブジェクトでも移動・サイズ変更が行えるようにしています。
	

setobjinfo オブジェクトID, 位置X, 位置Y, 横幅, 高さ, フラグ
オブジェクトID変更対象オブジェクトID指定する。
位置X変更後のX座標を指定する。尚、フラグに2を指定していると位置Xは無視される。
位置Y変更後のY座標を指定する。尚、フラグに2を指定していると位置Yは無視される。
横幅変更後の横幅を指定する。尚、フラグに1を指定していると横幅は無視される。
高さ変更後の高さを指定する。尚、フラグに1を指定していると高さは無視される。
フラグ動作フラグ(-1:スタイル変更時に使用 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
	ll_libload user, "user32.dll"
	ll_getproc SetWindowPos, "SetWindowPos", user

#module
#deffunc setobjinfo int, int, int, int, int, int
	mref id, 0 : mref px, 1 : mref py, 2 : mref sx, 3 : mref sy, 4 : mref flg, 5
	mref bmscr, 67
	if id < 1000 : i = id + 41 : i = bmscr.i : else : i = id
	prm = i, 0, px, py, sx, sy, flg = -1 * 0x0027 + (flg ! -1 * flg)
	ll_callfunc prm, 7, SetWindowPos@
	return
#global

	info = 50, 80, 100, 60
	objsize 40, 20
	pos  10, 10 : mes "位置"
	pos  80, 10 : input info.0
	pos 120, 10 : input info.1
	pos  10, 40 : mes "サイズ"
	pos  80, 40 : input info.2
	pos 120, 40 : input info.3
	pos 200, 10 : button "変更", *change
	buf = "対象ボックス"
	pos  info, info.1 : mesbox buf, info.2, info.3
	stop

*change
	setobjinfo 5, info.0, info.1, info.2, info.3
	stop

setobjinfo オブジェクトID, 位置X, 位置Y, 横幅, 高さ, フラグ
オブジェクトID変更対象オブジェクトID指定する。
位置X変更後のX座標を指定する。尚、フラグに2を指定していると位置Xは無視される。
位置Y変更後のY座標を指定する。尚、フラグに2を指定していると位置Yは無視される。
横幅変更後の横幅を指定する。尚、フラグに1を指定していると横幅は無視される。
高さ変更後の高さを指定する。尚、フラグに1を指定していると高さは無視される。
フラグ動作フラグ(-1:スタイル変更時に使用 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
#uselib "user32.dll"
#func  global SetWindowPos "SetWindowPos" int, int, int, int, int, int, int

#module
#deffunc setobjinfo int id, int px, int py, int sx, int sy, int flg, local i
	if id < 1000 : i = objinfo(id, 2) : else : i = id
	SetWindowPos i, , px, py, sx, sy, (flg = -1) * 0x0027 + (flg ! -1) * flg
	return
#global

	info = 50, 80, 100, 60
	objsize 40, 20
	pos  10, 10 : mes "位置"
	pos  80, 10 : input info.0
	pos 120, 10 : input info.1
	pos  10, 40 : mes "サイズ"
	pos  80, 40 : input info.2
	pos 120, 40 : input info.3
	pos 200, 10 : button "変更", *change
	buf = "対象ボックス"
	pos  info, info.1 : mesbox buf, info.2, info.3
	stop

*change
	setobjinfo 5, info.0, info.1, info.2, info.3