〜 ウィンドウ 〜
ウィンドウの操作可否設定

オープン・セーブダイアログを開いた時に元々のウィンドウは操作することが出来なくなります。
「開いたダイアログを先に処理して欲しい」「開いたダイアログ以外を処理して欲しくない」時に使う機能を
一般的にモーダルダイアログ・モーダルウィンドウ等と呼んでおり、
今回のTipsでは、サブウィンドウとして表示させたウィンドウをモーダルにするサンプルです。
使用するのはAPI関数EnableWindowで、引数は「ウィンドウハンドル」「有効フラグ」の2つ。
尚、HSP3以降では、自身のウィンドウハンドルはシステム変数で取得でき、
予め定義しておいたAPI関数EnableWindowを使用箇所でコールするだけなのでモジュール化してません。
	

winenable ウィンドウID, フラグ
ウィンドウID操作対象のウィンドウIDを指定する
フラグ無効化(=0)するか有効化(=1)するかを指定する

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

#module
#deffunc winenable int, int
	mref id, 0 : mref flg, 1
	mref bmscr, 96 + id
	prm = bmscr.13, flg
	ll_callfunc prm, 2, EnableWindow@
	return
#global

	onexit *exit
	pos 10, 10 : button "開く", *subopen
	screen 2, 400, 300, 2
	pos 10, 10 : button "閉じる", *subclose
	gsel 0, 1
	stop

*subopen
	winenable 0, 0
	gsel 2, 2
	stop

*subclose
	gsel 2, -1
	gsel 0, 1
	winenable 0, 1
	stop

*exit
	if wparam = 1 : goto *subclose
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#uselib "user32.dll"
#func  global EnableWindow "EnableWindow" int, int

	onexit gosub *exit
	pos 10, 10 : button gosub "開く", *subopen
	screen 1, 400, 300, 2
	pos 10, 10 : button gosub "閉じる", *subclose
	gsel 0, 1
	stop

*subopen
	EnableWindow hwnd, 0
	gsel 1, 2
	return

*subclose
	gsel 1, -1
	gsel 0, 1
	EnableWindow hwnd, 1
	return

*exit
	if wparam = 1 : gosub *subclose : else : end
	return