Last Update : 2006/11/xx
HSPでは、おなじみの「オブジェクトID」。HSPのスクリプト上でオブジェクト(button命令、chkbox命令、mesbox命令、input命令、combox命令、listbox命令)やWin32コントロール(winobj命令、axobj命令)を設置するごとに、0から順番に割り振られていく数値です。
この数値は、オブジェクトの状態や内容を変更するobjprm命令、オブジェクトを削除するclrobj命令、特定のオブジェクトにフォーカスを移動するobjsel命令で利用することになります。
で、このオブジェクトIDというのは、あくまでHSP(HSP3)が特別に用意してくれてる数値です。実際のWindowsプログラミングには、「ウィンドウハンドル」という内部識別番号のようなものがオブジェクト(コントロール)を設置するたびに割り振られています。
objinfo(オブジェクトID, 2)
このウィンドウハンドルの値を取得するために用意されてるのがHSPの標準関数であるobjinfo関数です。命令名の由来は、「object information」から。第1パラメータにHSPのオブジェクトID、第2パラメータの取得タイプに「2」を指定します。第2パラメータには他にもタイプが用意されてますが、通常利用することはないので無視してください。
objinfo関数は基本的にHSPの初心者さんが意識しておくべきものではありません。
HSPで設置したオブジェクトの「オブジェクトID」と「ウィンドウハンドル」の数値を表示するサンプルです。
オブジェクト設置命令を呼び出した直後のシステム変数statには、オブジェクトIDの値が代入されてます。これをobjinfo関数の第1パラメータに直接指定します。ついでに、ウィンドウハンドル値を変数に代入しておくのもいいでしょう。必ず0から始まるオブジェクトIDと違って、ウィンドウハンドルの値はプログラムを起動するたびに変動します。
// オブジェクトIDの値を表示 input b mes "オブジェクトID: "+stat chkbox "HSP〜", a mes "オブジェクトID: "+stat chkbox "objinfo〜", b mes "オブジェクトID: "+stat
// ウィンドウハンドルの値を表示 input b mes "ウィンドウハンドル: "+objinfo(stat, 2) chkbox "HSP〜", a hChkbox.0 = objinfo(stat, 2) mes "ウィンドウハンドル: "+hChkbox.0 chkbox "objinfo〜", b hChkbox.1 = objinfo(stat, 2) mes "ウィンドウハンドル: "+hChkbox.1
この数値を取得して何に使うのかというと、設置したオブジェクト(Win32コントロール)の制御を行うsendmsg命令(SendMessage関数)の第1パラメータに指定します。あるいは、Win32 API関数を利用する時にも使います。このサイトのHSP3 あれこれ (オブジェクト編)のページでは、objinfo関数をどんどん使うことになります。
オブジェクトのウィンドウハンドル値を取得する関数として、objinfo_hwnd関数が別に用意されていますが、これはobjinfo関数と処理内容は同じです。「hspdef.as」ファイル内でマクロ定義されてるもので、コンパイル時にobjinfo関数のタイプ2に置き換えられます。
objinfo_hwnd(オブジェクトID)
combox a, , "HSP\n講座\nobjinfo\n関数" mes "ウィンドウハンドル: "+objinfo(stat, 2) mes "ウィンドウハンドル: "+objinfo_hwnd(stat)