Last Update : 2008/06/xx
チェックボックスオブジェクトの設置です。命令名の由来は、「check box」から。
オブジェクト左側に口項目のチェック欄があり、マウスクリックかフォーカスがあればスペースキーで、レ点マークを入れたり外したりできます。その隣に表示してある文字列に対して、有効(オン) or 無効(オフ)をユーザに選択をさせるような機能になります。
chkbox "表示文字列", 状態保持変数
chkbox命令を呼び出した直後のシステム変数statには、チェックボックスのオブジェクトIDが返ります。オブジェクトIDは、オブジェクト設置順に0から割り振られる数値です。
チェックボックスを削除するにはclrobj命令、チェックボックスにフォーカスを移動するにはobjsel命令を利用します。チェックボックスのチェックを付け外しできないよう無効化するには、objgray命令(obj.asモジュール)やHSP 3.2以降で標準のobjenable命令があります。
チェックボックスの表示サンプルです。オブジェクトの表示位置を指定するにはpos命令、表示サイズを指定するにはobjsize命令を使用します。
; チェックボックスの表示位置 pos 100, 100 ; チェックボックスの表示サイズ ; (指定しなかった場合は64x24の大きさ) // objsize 100, 20 chkbox "チェックボックス", a
chkbox命令の状態保持変数には、口項目に表示されるレ点マークの有無を指定できます。また、後から状態保持変数をチェックすると、チェックボックスのレ点マークがあるかないかを確認できます。
pos 50, 50 objsize 100, 22 ; 状態保持変数にあらかじめ1を指定しておくと、レ点マークありのチェックボックス a = 1 chkbox "チェックボックスA", a chkbox "チェックボックスB", b chkbox "チェックボックスB", c button "チェック", *check stop *check ; チェックあり(=1)、チェックなし(=0) mes "A:"+a+" / B:"+b+" / C:"+c+"
チェックボックスにレ点チェックがあるかないかをリアルタイムで監視する1つの方法です。ループ中に状態保持変数の変化を確認します。
ちなみに、チェックボックス上の文字列の表示フォントを指定するには、font命令+objmode命令(モード2)を利用します。
font "", 10, 1 objmode 2 objsize 120, 20 chkbox "チェックボックスA", a chkbox "チェックボックスB", b repeat wait 10 title "A:"+a+" / B:"+b+"" loop
すでに設置してあるチェックボックスに、スクリプト上からレ点マークを入れたり外したりするには、HSPで様々なオブジェクト制御を行うobjprm命令を利用します。chkbox命令の状態保持変数そのものに数値を代入しても意味がないので注意。
pos 100, 100 objsize 100, 20 chkbox "チェック1", a chkbox "チェック2", b button "選択", *select stop *select ; ↓のようにしても全く意味なし ; a = 1 ; 第2パラメータに0(チェックを外す) or 1(チェックを入れる) objprm 0, 1 objprm 1, 1
// × オブジェクト設置後に代入処理を用意しても変わりません。 chkbox "チェック1", a chkbox "チェック2", b a = 1 b = 1
ちなみに、HSP2の場合はobjprm命令の第2パラメータに文字列を指定すると、チェックボックス上に表示されてる文字列を変更できます。ただ、HSP 3.0/3.1ではエラーで機能しないので、sendmsg命令を利用します。HSP 3.2以降は、objprm命令でチェックボックスの文字列を変更できるようになってます。
チェックボックスオブジェクトに関連したHSP3(HSP 3.x)向けの発展的なサンプルソース、モジュールを公開しています。sendmsg命令、oncmd命令、Windows API関数などを利用して、このページで紹介しているチェック監視の別手法、基本的な命令では実現できない発展的な処理を実現してみます。
たとえば、チェックボックスにちょっと似たオブジェクトに「ラジオボタン」というのが存在します。複数の項目の中から1項目のみユーザーに選択させるオブジェクトです。HSPの標準命令では用意されてませんが、chkbox命令とWindows API関数を利用して実現してみます。
他にも文字列の表示位置の変更、文字列の複数行(改行)表示、3ステートチェックボックスの設置など。
→ HSP3オブジェクトの全般的な情報
→ sendmsg命令のコード
(ボタン・チェックボックス)
→ チェックボックス関連の発展的なサンプルコード
(ラジオボタンについても)