Last Update : 2009/06/xx
HSPのオブジェクトにフォーカスを設定する命令です。命令名の由来は、「object select」から。フォーカスは複数の箇所に同時に表示させることはできません。また、objsel命令が機能するのは6つの標準オブジェクトだけです。
objsel オブジェクトID
第1パラメータには、オブジェクト設置ごとに0から順番に割り振られる「オブジェクトID」を指定します。ちなみに、オブジェクトIDの値は、オブジェクト設置直後のシステム変数statに格納されてます。
そして、objsel命令にはもう1つ機能が用意されてます。第1パラメータに「-1」を指定した場合、現在フォーカスのある「オブジェクトID」がシステム変数statに返ってきます。これを利用した実例が、入力ボックス(input命令)のEnterキー判定です。
HSPのオブジェクト | 呼び出し後の挙動 |
button命令 (ボタン) chkbox命令 (チェックボックス) listbox命令 (リストボックス) combox命令 (コンボボックス) |
オブジェクト表面色の変化 (Windows XP以前の環境やクラシックスタイル適用時は 点線枠の表示) |
input命令 (入力ボックス) | キャレットの表示と文字列の選択 |
mesbox命令 (メッセージボックス) | キャレットの表示 |
winobj命令 (Win32コントロール) axobj命令 (ActiveXコントロール) |
objsel命令は機能せず (Win32 API関数のSetFocus関数やGetFocus関数を利用) |
具体的にフォーカスがオブジェクトに存在すると、ボタンの場合はスペースキーで"押す"の挙動になります。チェックボックスの場合はスペースキーでチェックの切り替えができます。入力ボックスやメッセージボックスの場合は文字を入力できます。リストボックスやコンボボックスの場合はカーソルキー(矢印キー)で項目の変更ができます。
また、フォーカスはTABキーでオブジェクト間を順番に移動させることができます。TABキーによるフォーカス移動は、HSP2ではデフォルトで無効、HSP3では有効になっており、objmode命令で切り替えができます。HSP 3.2以降ではobjskip命令でオブジェクトごとのフォーカス移動の挙動を指定できます。
objsel命令の簡単なサンプルスクリプトです。普通のフォーカス指定。そして、キーボードの「C」キーを押した時、タイトルバーにフォーカスのあるオブジェクトIDが表示されます。
; objsel命令サンプル onkey gosub *jump chkbox "あー", id0 chkbox "いー", id1 combox id2, , "フォーカス\n設定\nコントロール" listbox id3, 50, "objsel\nオブジェクト\nHSP" input id4 id5 = "" : mesbox id5, 200, 50 ; 通常のフォーカス指定 (オブジェクトID) objsel 1 stop *jump ; Cキーを押したら if wparam = 'C' { ; -1を指定した場合はフォーカスのあるオブジェクトIDがstatに返る objsel -1 title "オブジェクトID:"+stat } return
※ コンボボックスやリストボックスの項目選択
objsel命令はあくまで1オブジェクト全体のフォーカス指定として機能します。combox命令(コンボボックス)やlistbox命令(リストボックス)の特定項目を選択状態にするにはobjprm命令を利用します。
HSP3 あれこれ (オブジェクト編)では、オブジェクトに関連した各種命令の一覧表を掲載してます。