命令講座 <objinfo関数>

Last Update : 2006/11/xx

objinfo関数 (HSP3.x)

 HSPではおなじみの「オブジェクトID」。スクリプト上でオブジェクト(button命令chkbox命令mesbox命令input命令combox命令listbox命令)やコントロール(winobj命令、axobj命令)を設置するごとに、0から順番に割り振られていくものです。この数値はオブジェクトの状態や内容を変更するobjprm命令、オブジェクトを削除するclrobj命令、オブジェクトにフォーカスを移すobjsel命令で使います。

 で、このオブジェクトIDというのは、あくまでHSP(HSP3)が特別に用意してくれてる数値です。実際のWindowsプログラミングには「ウィンドウハンドル」(単に「ハンドル」)という内部識別番号のようなものがオブジェクト(コントロール)を設置するたびに割り振られています。

 objinfo(オブジェクトID, 2)

 このハンドル値を取得するために用意されてるのがobjinfo関数です。命令名の由来は、「object information」から。第1パラメータにHSPのオブジェクトID、第2パラメータの取得タイプに「2」を指定します。他にも取得タイプがいくつか用意されてますが、通常利用することはないので無視してください。

 基本的にHSPの初心者さんが意識しておくべき関数ではありません。

^

サンプルコード

 HSPのオブジェクトIDと、オブジェクトのウィンドウハンドル値を表示するサンプルです。

 オブジェクト設置命令を呼び出した直後のシステム変数statにはオブジェクトIDが返ってくるので、これをobjinfo関数の第1パラメータに直接指定するといいです。ついでに、ハンドル値を変数に代入しておくのもいいでしょう。オブジェクトIDと違って、ウィンドウハンドル値はプログラムを起動するたびに変動します。

//	オブジェクトID & オブジェクトのハンドル値の表示

	input b
		mes "オブジェクトID: "+stat
		mes "ウィンドウハンドル: "+objinfo(stat, 2)

	chkbox "HSP〜", a
	hChkbox.0 = objinfo(stat, 2)
		mes "オブジェクトID: "+stat
		mes "ウィンドウハンドル: "+hChkbox.0

	chkbox "objinfo〜", b
	hChkbox.1 = objinfo(stat, 2)
		mes "オブジェクトID: "+stat
		mes "ウィンドウハンドル: "+hChkbox.1

 この数値を取得して何に使うのかというと、HSPのオブジェクト設置命令やwinobj命令で設置したオブジェクト(コントロール)の制御を行うsendmsg命令(SendMessage関数)の第1パラメータに指定します。あるいは、Win32 API関数を利用する時にも使います。このサイトのHSP3 あれこれ (オブジェクト編)のページでは、objinfo関数をどんどん使います。

^

objinfo_hwnd関数

 オブジェクトのウィンドウハンドル値を取得する関数に、objinfo_hwnd関数が別に用意されていますが、objinfo関数と処理内容は同じです。これは「hspdef.as」ファイル内でマクロ定義されてるので、コンパイルの時にobjinfo関数のタイプ2に置き換えられます。

 objinfo_hwnd(オブジェクトID)

;	!エディタの[HSP]→[HSP拡張マクロを使用する]を要有効

	combox a, , "HSP\n講座\nobjinfo\n関数"

	mes "ウィンドウハンドル: "+objinfo(stat, 2)
	mes "ウィンドウハンドル: "+objinfo_hwnd(stat)

^

Copyright © 2005-2008 HSP情報サイト Let's HSP!. All rights reserved.