ウィンドウ・システム情報の取得と設定
19章でウィンドウの新規生成(初期化)、タイトルテキストの変更、位置・サイズの変更を行いました。
この章では、まだ紹介していないウィンドウ操作やシステム操作の命令を紹介します。

命令ではありませんが、ウィンドウ・ディスプレイサイズを取得するマクロを紹介しました。
ginfo_winxマクロやginfo_dispyマクロ等のことです。
この章ではまずはじめに、このマクロの実体である命令を紹介しましょう。

取得情報 = ginfo(取得タイプ)
取得情報取得した情報の代入先。
取得タイプ取得したいウィンドウ関連情報の番号(後述)を指定する。
GraphicsINFOrmationの略でしょうか? ginfo関数というのがマクロの実体であり、「common/hspdef.as」に定義されています。 HSP拡張マクロを指定するチェックを付けない場合、または番号で指定したい場合、 ginfo関数の第1パラメータは以下に示す番号を指定してください。

番号マクロ名 内容
0ginfo_mxディスプレイ左上を基点としたマウスカーソルのX座標を取得する。
1ginfo_myディスプレイ左上を基点としたマウスカーソルのY座標を取得する。
2ginfo_actアクティブなHSPウィンドウのウィンドウIDを取得する。
3ginfo_sel操作対象のgsel命令で指定されたウィンドウIDを取得する。
4ginfo_wx1ディスプレイ左上を基点としたウィンドウ左上X座標を取得する。
5ginfo_wy1ディスプレイ左上を基点としたウィンドウ左上Y座標を取得する。
6ginfo_wx2ディスプレイ左上を基点としたウィンドウ右下X座標を取得する。
7ginfo_wy2ディスプレイ左上を基点としたウィンドウ右下Y座標を取得する。
8ginfo_vxウィンドウ内がどれだけスクロールされたかを示す描画基点X座標を取得する。
9ginfo_vyウィンドウ内がどれだけスクロールされたかを示す描画基点Y座標を取得する。
10ginfo_sizexタイトルバーやウィンドウ枠も含んだウィンドウ全体のXサイズを取得する。
11ginfo_sizeyタイトルバーやウィンドウ枠も含んだウィンドウ全体のYサイズを取得する。
12ginfo_winxウィンドウ内の描画Xサイズを取得する。
13ginfo_winyウィンドウ内の描画Yサイズを取得する。
14ginfo_mesxメッセージの出力Xサイズを取得する。
15ginfo_mesyメッセージの出力Yサイズを取得する。
16ginfo_r現在設定されている赤輝度を取得する。
17ginfo_g現在設定されている緑輝度を取得する。
18ginfo_b現在設定されている青輝度を取得する。
19ginfo_paluseデスクトップのカラーモードがフルカラー(=0)か256色パレット(=1)かを取得する。
20ginfo_dispxディスプレイ全体のXサイズを取得する。
21ginfo_dispyディスプレイ全体のYサイズを取得する。
22ginfo_cxHSPウィンドウ内のカレントXポジションを取得する。
23ginfo_cyHSPウィンドウ内のカレントYポジションを取得する。
24ginfo_intidメッセージ割り込みされたウィンドウのウィンドウIDを取得する。
25ginfo_newid未使用ウィンドウIDを取得する。(HSP3.2〜)
26ginfo_sxウィンドウの初期化Xサイズを取得する。
27ginfo_syウィンドウの初期化Yサイズを取得する。
パラメータ25はHSP3.2から新しく追加されたもので、 ginfo関数またはginfo_newidマクロ使用時点で一度も使用されていないウィンドウのうち、 一番小さいウィンドウIDを取得するというものです。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
	wx = 800 : wy = 600
	// ディスプレイサイズ(ginfo_dispx, ginfo_dispy)を取得し、中央に表示
	screen 0,wx, wy, 1, (ginfo(20) - wx) / 2, (ginfo(21) - wy) / 2 
	// カラーモード(ginfo_paluse)を取得
	if ginfo(19) {
		mes "カレントウィンドウはパレットモードです!"
		mes "最大で256色しか使用できません。"
	} else {
		mes "カレントウィンドウはフルカラーモードです。"
		mes "全ての色を使用することができます。"
	}
既に紹介しているscreen命令やbgscr命令は、 新しくウィンドウを生成すると同時に、ウィンドウを再初期化する機能を持ち合わせており、 生成済みウィンドウは、位置・サイズを決めた上でオブジェクトや描画内容を消去するというものでした。 ウィンドウの位置やサイズを変更する必要がなく、生成済みウィンドウの再初期化を行いたい場合は、 以下に記述した命令を使用するとよいでしょう。
cls 背景色番号
背景色番号クリアする色番号(後述)を指定する。
ClearSscreenの略でしょう。 cls命令に指定する色番号は次の通りです。
色番号カラーコード
0(省略)255, 255, 255
1明るい灰色192, 192, 192
2灰色128, 128, 128
3暗い灰色64, 64, 64
40, 0, 0
HSP2まではパレットモードウィンドウに、明るい灰色(=1)を指定すると、 緑染みた色になってしまい、フルカラーモードと色が異なってしまうという事象が起こってました。 HSP3からは、フルカラーモードもパレットモードも同色であると思われます。 さて、下記のサンプルはcls命令を用いた「悪い」例です。
 1
 2
 3
 4
 5
 6
 7
 8
 9
	repeat 200, 1
		wait 1
		redraw                                    // チラつき防止?
		cls                                       // 白色でクリア
		color 255 : boxf 50, 50, cnt * 2 + 50, 80 // プログレスバーを表示
		redraw 1
	loop
	color
	pos 50, 100 : mes "終了"
実行していただければすぐに分かるかと思いますが、ウィンドウがかなりチラついています。 チラつく時はredraw命令を用いるということでしたが、それでも効果ありません。 これは、cls命令に「redraw命令で仮想画面だけを書き換えるフラグ」をもクリアする機能があるためです。 cls命令でクリアされるのは画面内の表示されている情報だけではありません。 カレントカラーやポジションなどの現在保持しているシステム情報の他、 フォントや今回サンプルにもあった仮想画面のみを書き換えるフラグ等、様々な設定情報を初期化します。 ウィンドウ内の情報だけクリアしたい場合は、 描画内容はboxf命令で塗りつぶし、オブジェクトに関してはclrobj命令で除去するようにしましょう。 次に画面の解像度を変更する命令を紹介しましょう。 デスクトップ上のコンテキストメニューで画面のプロパティを開き、 そのプロパティで画面の解像度を変更することが可能です。 HSPからも、この解像度を変更することが出来るようになっています。
chgdisp モード, 横幅, 高さ
モード変更モード(0:元に戻す 1:フルカラーモード 2:パレットモード)を指定する。
横幅X方向の解像度を指定する。
高さY方向の解像度を指定する。
CHanGeDISPlayの略で、名の通り、強制的に解像度を指定サイズに変更します。 第1パラメータのモードは、上に書いた通り、1で1677万色、2で256色限定に、 0で変更したものを、変更前のモードに戻す処理を行います。 第2、3パラメータには変更後の解像度をピクセル単位で各々書くわけですが、 正常に変更できるのは、予めPC側で定義されているもののみで、 管理人の環境では、1024×768、800×600、640×480、400×300だけでした。 もっと大きな解像度を設定できるPCをご利用であれば、1600×1200や、1920×1200等、 ワイド(16:9)対応なら、1280×720等も可能ではないでしょうか。 尚、第2、3パラメータを省略すると、640×480となります。 正常に変更できたか否かは stat に結果が返ります。 正常に変更できると0が、カラーモード変更は失敗だが解像度のみ変更できると1が、 解像度の変更が出来ないと2が返るとヘルプには記載されています。 が、試したところ、解像度変更が出来ないだけでも1が返っていました。 コレは現存する不具合なのか、勘違いしているだけなのか…。 HSPウィンドウを終了させると設定した解像度は元の解像度に戻ります。 HSPが終了しても変更した解像度はそのまま引き継ぐようにするには、 HSP標準命令ではなく、別の方法が必要となりますが、この入門講座では説明しません。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
	rate = 4, 3               // 比率
	size = 256, 200, 160, 100 // 設定サイズ
	txt = ""
	foreach size
		if txt ! "" : txt += "\n"
		txt += "" + (size.cnt * rate.0) +"×" + (size.cnt * rate.1) // コンボボックステキスト
	loop
	objsize 100, 25
	pos  10, 10 : mes "変更サイズ"
	pos 100, 10 : combox index, 100, txt
	objsize 40, 25
	pos 210, 10 : button "変更", *change
	stop

*change
	chgdisp 1, size.index * rate.0, size.index * rate.1 // 解像度を変更する
	if stat : dialog "正常に変更完了できませんでした", 1
	stop
25章で、使用フォントを変更するfont命令を紹介しました。 この命令とは別に、システムフォントを選択する命令も用意されていますので紹介しましょう。
sysfont フォント番号
フォント番号後述のフォント番号を指定する。
SYStemFONTの略に間違いないと思われます。 パラメータには次のいずれかの番号を指定してください。

番号 内容
0HSP起動時に使用されているobjmode命令のモード0と同じフォント。
10OEMキャラクタの固定幅フォント。
11Windows文字セットの固定幅システムフォント。
12Windows文字セットの可変幅システムフォント。
13標準システムフォント。
17objmode命令のモード1と同じGUIフォント。
OEMキャラクタとは、ANSIでお馴染みの文字セットのことで、 ANSIのASCIIと同じ文字コードが割り当てられているようですが、 他の特徴はよく分かっていませんので、詳しく知りたい方は調べるなり人に聞くなりしてみてください。 11と12のWindows文字セットというのも、文字セットとして シフトJIS、UTF-8、UTF-16、UTF-16BE、UTF-16LEが該当するようですが、 結局の所、どのフォントを指しているのか、よく分かっていません。 使用してみると、全角文字は化けてしまいましたので、使用する際は注意してください。 sysfont命令は使い道として、font命令で特定のフォントを使用した後に、 元のHSPデフォルトフォントに戻したい場合等にご利用いただけるかと思います。
 1
 2
 3
 4
 5
	mes "[HSPデフォルトフォント]で使用する。"
	font msmincho, 16
	mes "[MS 明朝を使用する。"
	sysfont // 元のフォントを指定
	mes "[HSPデフォルトフォント]に戻す。"
この章最後の命令に移りたいと思います。
sysinfo タイプ
タイプ取得タイプ番号(後述)を指定する。
SYStemINFOrmationの略で、パラメータには以下の取得項目番号を指定しますが、 取得項目により、数値タイプと文字列タイプがあるので配列にセットする場合は気をつけてください。

番号 内容
0現在のOS名・バージョン「OS verX.X」と言った形式を取得します。
1現在のログインユーザー名を取得します。
2ネットワーク上において識別するためのコンピュータ名を取得します。
16CPUコードを取得します。
33%単位で物理メモリの使用サイズを取得します。
34バイト単位で搭載メモリサイズを取得します。
35バイト単位で空きメモリサイズを取得します。
36バイト単位で総スワップファイルサイズを取得します。
37バイト単位で空きスワップファイルサイズを取得します。
38バイト単位で仮想メモリを含めたメモリサイズを取得します。
39バイト単位で仮想メモリを含めた空きメモリサイズを取得します。
CPUコードは、インテルの386、486、586(ペンティアム)とかそんな値が返ります。 尚、文字列型で返るのは0〜2だけで、CPUコード以降は全て数値型です。 バイト単位のサイズが「実際に表示させた時に見難い」と思うのならば、 サンプルのようにMB単位に直して表示すればOKです。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	title "システム一覧"
	pos  10,  10 : mes "OS、バージョン"
	pos 280,  10 : mes sysinfo(0)
	pos  10,  40 : mes "ログインユーザー"
	pos 280,  40 : mes sysinfo(1)
	pos  10,  70 : mes "コンピュータ名"
	pos 280,  70 : mes sysinfo(2)
	pos  10, 100 : mes "CPUの種類"
	pos 280, 100 : mes sysinfo(16)
	pos  10, 130 : mes "物理メモリ使用量"
	pos 280, 130 : mes "" + sysinfo(33) + "%"
	pos  10, 160 : mes "メモリサイズ"
	pos 280, 160 : mes "" + (sysinfo(34) / 1048576) + "MB"
	pos  10, 190 : mes "空きメモリサイズ"
	pos 280, 190 : mes "" + (sysinfo(35) / 1048576) + "MB"
	pos  10, 220 : mes "スワップファイルサイズ"
	pos 280, 220 : mes "" + (sysinfo(36) / 1048576) + "MB"
	pos  10, 250 : mes "空きスワップファイルサイズ"
	pos 280, 250 : mes "" + (sysinfo(37) / 1048576) + "MB"
	pos  10, 280 : mes "メモリサイズ(仮想込)"
	pos 280, 280 : mes "" + (sysinfo(38) / 1048576) + "MB"
	pos  10, 310 : mes "空きメモリサイズ(仮想込)"
	pos 280, 310 : mes "" + (sysinfo(39) / 1048576) + "MB"