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 あれこれ (オブジェクト編)では、オブジェクトに関連した各種命令の一覧表を掲載してます。