Last Update : 2006/11/xx
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関数と処理内容は同じです。これは「hspdef.as」ファイル内でマクロ定義されてるので、コンパイルの時にobjinfo関数のタイプ2に置き換えられます。
objinfo_hwnd(オブジェクトID)
; !エディタの[HSP]→[HSP拡張マクロを使用する]を要有効 combox a, , "HSP\n講座\nobjinfo\n関数" mes "ウィンドウハンドル: "+objinfo(stat, 2) mes "ウィンドウハンドル: "+objinfo_hwnd(stat)