〜 システム 〜
有効なスクリーンサイズを設定 (要USER32.DLL)

HSPで独自にアプリケーションツールバーを作成するときに必要になるのが、
他のウィンドウを最大化されても上に被さらないようにする処理です。
API関数のSystemParametersInfoを利用すれば簡単に設定できますので、今回はコレを使ってみます。
SystemParametersInfoでは、取得及び設定のできる項目総数が150ほどあり、
当ページで全てを紹介出来ませんので、今回のTipsに必要な項目だけ抜粋すると次のようになります。
uiActionuiParampvParam
SPI_SETWORKAREA(=0x002F)不使用(=0)RECT構造体のポインタ
RECT構造体は左端・上端・右端・下端座標を合わせて矩形を表現するためのもので、、 コレを元に要素0を左、1を上として左上の座標を、2を右、3を下として右下の座標を設定してください。 尚、アプリケーションを終了されるときには、ワークエリアサイズを戻すのを忘れてはなりません。 下記のサンプルではコチラで紹介しているサイズ取得モジュールを併用していますが、 設定だけでよい場合は、同時に使用する必要はありません。

spi アクション, 送信値, 一時変数, 更新
アクション実施するシステム情報の取得・設定内容を指定する。
送信値数値パラメータを指定する。
一時変数一時的に使用する変数のポインタを指定する。
更新設定時にユーザープロファイルの更新、ウィンドウへの通知を実施するか否かを指定する

getworkarea 格納配列
格納配列現在のワークエリア4隅のポジション(0:左 1:上 2:右 3:下)を格納する数値型配列を指定する
尚、命令内部でspi命令を使用しているため、getworkarea命令より前にspi命令を定義すること。

setworkarea 設定済配列
設定済配列設定するワークエリア4隅のポジション(0:左 1:上 2:右 3:下)を格納した数値型配列を指定する
尚、命令内部でspi命令を使用しているため、setworkarea命令より前にspi命令を定義すること。

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

#module
#deffunc spi int, int, int, int
	mref uiaction, 0 : mref uiparam, 1 : mref pvparam, 2 : mref fwinini, 3
	prm = uiaction, uiparam, pvparam, fwinini
	ll_callfunc prm, 4, SystemParametersInfo@
	return

#deffunc getworkarea val
	mref ary, 48
	ll_getptr ary : ll_ret p
	spi 0x0030, 0, p, 0 // SPI_GETDESKWALLPAPER
	return

#deffunc setworkarea val
	mref ary, 48
	ll_getptr ary : ll_ret p
	spi 0x002F, 0, p, 0 // SPI_GETDESKWALLPAPER
	return
#global

	dim area1, 4
	dim area2, 4
	getworkarea area1
	area2 = area1.0, area1.1, area1.2 - 160, area1.3
	screen 0, 160, area1.3 - area1.1, , area1.2 - 160, area1.1
	title "もどき"
	gsel 0, 2
	setworkarea area2
	onexit *exit
	pos 50, 50 : mes  "他\nの\nウ\nィ\nン\nド\nウ\nを\n最\n大\n化\nし\nて\nみ\nて\nく\nだ\nさ\nい"
	stop

*exit
	setworkarea area1

getworkarea 格納配列
格納配列現在のワークエリア4隅のポジション(0:左 1:上 2:右 3:下)を格納する数値型配列とを指定する

setworkarea 設定済配列
設定済配列設定するワークエリア4隅のポジション(0:左 1:上 2:右 3:下)を格納した数値型配列を指定する

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

#module
#deffunc getworkarea array ary
	SystemParametersInfo 0x0030, 0, ary // SPI_GETWORKAREA
	return

#deffunc setworkarea array ary
	SystemParametersInfo 0x002F, 0, ary // SPI_SETWORKAREA
	return
#global

	dim area1, 4
	dim area2, 4
	getworkarea area1
	area2 = area1.0, area1.1, area1.2 - 160, area1.3
	screen 0, 160, area1.3 - area1.1, , area1.2 - 160, area1.1
	title "もどき"
	gsel 0, 2
	setworkarea area2
	onexit *exit
	pos 50, 50 : mes  "他\nの\nウ\nィ\nン\nド\nウ\nを\n最\n大\n化\nし\nて\nみ\nて\nく\nだ\nさ\nい"
	stop

*exit
	setworkarea area1
	end