オブジェクトを一時的に非表示に

Windowsプログラミングツール「HSP 3.x」(公式サイト「HSPTV!」)で設置 できる各種オブジェクト、・・・ボタン(button命令)、チェックボックス(chkbox命令)、リストボックス(listbox命令)、 コンボボックス(combox命令)、入力ボックス(input命令)、メッセージボックス(mesbox命令)。

HSP標準命令ではオブジェクトの完全撤去(消去、クリア)にclrobj命令 が用意されてます。これは完全にオブジェクトがなくなってしまうため、表示の復帰はできません。あくまでオブジェクトを再設置することになります。

Win32 APIのShowWindow関数

というわけで、オブジェクト(コントロール)の表示・非表示を指定でできる Win32 APIShowWindow関数をHSPから利用してみることにましょう。この 関数は、あくまで見た目の切り替えなので、表示が隠れてもオブジェクトの状態や内容が維持されます。

ShowWindow関数はシステムの「user32.dll」に含まれてるので、関数の宣言が含まれてる「user32.as」 をインクルードしときます。

ShowWindow関数の第1パラメータは、表示の切り替え対象となるオブジェクトのウィンドウハンドル値を指定します。 オブジェクトのウィンドウハンドルはHSPのobjinfo関数(タイプ2)を利用して取得しておきます。第2パラメータは 状態の指定です。0が非表示状態、5が(再)表示状態への切り替えとなります。

#include "user32.as"

	pos 100, 100
	chkbox "ちぇっく", a
	hChkbox = objinfo(stat, 2)	; ウィンドウハンドル取得

	button "切り替え", *change1

	pos 200, 100
	combox b, 100, "オブジェクト\n非表示\n消す"
	hCombox = objinfo(stat, 2)	; ウィンドウハンドル取得

	button "切り替え", *change2

	stop

*change1
	if check1 {
		ShowWindow hChkbox, 5
	} else {
		ShowWindow hChkbox, 0
	}

;	0 or 1 のスイッチ処理
	check1 ^ 1

	stop

*change2
	if check2 {
		ShowWindow hCombox, 5
	} else {
		ShowWindow hCombox, 0
	}

	check2 ^ 1

	stop

☆ obj.asモジュール
 HSP3にあらかじめ用意されてるモジュールファイル(common\obj.as)です。標準命令には存在しないオブジェクトに関連する命令がいくつか用意されてます。

それぞれモジュール内でWin32 API関数を呼んで実現してます。利用するには「obj.as」をインクルードします。命令の説明はモジュール内を参照、それを利用した付属サンプルは「sample\new\winobj.html」です。(HSP 3.2〜では「sample\misc\winobj.html」)

ちなみに、HSP 3.2以降ではobjenable命令という標準命令が新規にサポートされます。これはモジュールの objgray命令とまったく同じ処理です。

(おまけ)自ウィンドウの非表示

ついでに、HSPで用意できるウィンドウの非表示は、screen命令・bgscr命令の第4パラメータや、gsel命令で 制御できます。
 コンパイル済み実行ファイルの時点でウィンドウを非表示状態で起動するには、実行ファイル自動作成 の#packopt命令(hideパラメータ)があります。(旧式のEXEファイル作成なら、[特殊な設定]→[起動時にメインウィンドゥを非表示にする]を)

キーワード de HSP

HSPミニ講座

★ Yahoo!経由用ページ : ファイル | フォルダ | メニュー | マウス | ウィンドウ | オブジェクト | 文字列 | システム | 関数 | sendmsg命令 | その他 | サイトマップ | リンク