ラジオボタン付きのダイアログボックスを作ります。
ラジオボタンは、選択肢の中から1つだけを選ぶときに使います。
ラジオボタンとは
このように、選択しが並んでいて、1つを選択すると他がキャンセルされるボタンです。
何でラジオ?と疑問を持つ方も多いと思います。
1つしか選択できないところが、車のラジオのチャンネル切替えボタンに似ていることからこの名前が付いたらしいです。
ラジオタイル radio_column(row)と ボタン radio_button
ラジオタイルは、radio_column (横並びは radio_row)タイルと、各ボタンのradio_button タイルで形成されます。
radio_column
column は、各ボタンが縦並びです。
:radio_column{ key="RadioTest"; :radio_button{ label=" Option 1"; key="1";} :radio_button{ label=" Option 2"; key="2";} :radio_button{ label=" Option 3"; key="3";} }
radio_row
row は、各ボタンが横並びです。
:radio_row{ key="RadioTest"; :radio_button{ label=" Option 1"; key="1";} :radio_button{ label=" Option 2"; key="2";} :radio_button{ label=" Option 3"; key="3";} }
ダイアログボックス
ラジオボタンを使ったダイアログボックスのコードです。
DCL
Radio_Button :dialog
{label = "Radio Button";
//--------------------------------------------------------
:radio_column{ key="RadioTest";
:radio_button{ label=" Option 1"; key="1";}
:radio_button{ label=" Option 2"; key="2";}
:radio_button{ label=" Option 3"; key="3";}
} // RADIO COLUMN END
//--------------------------------------------------------
ok_cancel;
}
label
各ラジオボタンのラベルが、ボタンの横の文字になります。
label はダイアログボックスで表示する以外は使わないので、好きなように書いて下さい。AutoLISPと合わせることとか考えなくてもいいです。
上の例ではラジオ列radio_columnにはラベルをつけませんでしたが、ラジオ列にもラベルを付けると、以下のようにラベルと囲い枠が出ます。
:radio_column{ label= “Radio Column”; key=”RadioTest”;
Key
このラジオボタン列のキーは”RadioTest”。
各ボタンのキーに “1” ”2″ ”3″ とキーを設定しました。
キーはAutoLISP側とやり取りをする部分なので、大文字小文字含めてAutoLISPと合う必要があります。
ここは文字列しか使えないので、数字をキーにする場合でもダブルクォーテーション ” ” を必ずつけてください。
AutoLISP
上記のDCLが、JagaDCL.dclという名前で、サポートファイルの検索パス内にあるフォルダに保存してあること前提のAutoLISPプログラムです。
コマンドの内容
上記のDCLのダイアログボックスを表示させて、選択されたオプションをアラートボックスで表示するプログラムです。
コマンド名は test です。
AutoLISP プログラム
(defun c:test ( / dcl_id Act RadioTest)
(setq dcl_id (load_dialog "JagaDCL.dcl"))
(if (not (new_dialog "Radio_Button" dcl_id))
(progn
(princ "***ダイアログボックスが見つかりません***")
(exit)
));progn if
;-----------------------------------------------------------
(set_tile "RadioTest" "1")
;-----------------------------------------------------------
(action_tile "accept" "(Test_GetVar)(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
;-----------------------------------------------------------
(setq Act (start_dialog))
(unload_dialog dcl_id)
;-----------------------------------------------------------
(cond
((= Act 0) (princ "ユーザーキャンセル"))
((= Act 1) (alert (strcat "オプション " RadioTest " が選択されました")))
);cond
;----------------------------------------------------------
(princ))
;===========================================
(defun Test_GetVar ()
(setq RadioTest (get_tile "RadioTest"))
)
AutoLISPの説明
(set_tile "RadioTest" "1")
ダイアログボックスを開いたときにとりあえずオプション1を選択しておきます。
(action_tile "accept" "(Test_GetVar)(done_dialog 1)")
“accept” はOKボタンのキーです。OKが押されたら、自作関数Test_GetVarを実行し、ダイアログボックスをを閉じ、1を戻します。
(defun Test_GetVar () (setq RadioTest (get_tile "RadioTest")) )
OKが押されたときに実行される自作関数Test_GetVarです。
get_tileで、キー”RadioTest”のタイルから値を得て、変数 RadioTest に値を入れます
(cond ((= Act 0) (princ "ユーザーキャンセル")) ((= Act 1) (alert (strcat "オプション " RadioTest " が選択されました"))) );cond
条件式 cond を使い、
Act 0 (キャンセルボタンで終了)なら ユーザーキャンセルとコマンドラインに表示。
Act 1 (OKボタンで終了)オプション# が選択されましたとアラートボックスに表示。
となっています。
まとめ
- ラジオタイルは、列(行)タイルradio_column (row) とボタンタイルradio_buttonタイルで形成されている。
- 複数の選択肢の中から、1つだけを選ぶ項目に使う。
使用例
イメージとラジオボタンを組み合わせたサンプルです。
何か思いついたらシンプルなラジオボタンのみのサンプルも作ろうと思います。