ポップアップリストタイルは、ラジオボタン同様に、複数の選択肢から1つだけを選んで欲しい時に使います。
ポップアップリストとは
プルダウンメニューで選択肢が出てくるタイルです。
ユーザーに、選択肢の中から1つだけ選んで欲しいときに使います。
ポップアップリストタイル :popup_list
- ダイアログボックス名: Pop Up List
- ポップアップリストタイル: 選択肢 A B C
- OK/キャンセルボタン
を表示させるダイアログボックスを作ります。
DCL
Test_PopUpList :dialog
{label = "Pop Up List";
//--------------------------------------------------------
:popup_list {key="PL";}
//--------------------------------------------------------
ok_cancel;
}
:popup_list 用のAutoLISP関数
AutoLISP側ではリストに入れる選択肢を設定するので、他のタイルに比べて少々面倒です。
AutoLISP
上記のDCLが、JagaDCL.dclという名前で、サポートファイルの検索パス内にあるフォルダに保存してあること前提のAutoLISPプログラムです。
ポップアッリストのダイアログボックスを出し、OKボタンが押されたら、選択された記号をコマンドラインに表示させます。
(defun c:test (/ dcl_id Act PL Op)
(setq dcl_id (load_dialog "JagaDCL.dcl")) ;
(if (not (new_dialog "Test_PopUpList" dcl_id))
(progn
(princ "***ダイアログボックスが見つかりません***")
(exit)
));if
;-----------------------------------------------------------
(start_list "PL")
(add_list "A")
(add_list "B")
(add_list "C")
(end_list)
(set_tile "PL" "0")
;-----------------------------------------------------------
(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) (princ (strcat "選択したのは:" Op))
);act1
);cond
;----------------------------------------------------------
(princ))
;===========================================
(defun Test_GetVar ()
(setq PL (get_tile "PL"))
(cond
((= PL "0") (setq Op "A"))
((= PL "1") (setq Op "B"))
((= PL "2") (setq Op "C"))
);cond
);defun
AutoLISPの説明
関数 start_list add_list end_list
ポップアップリスト用に、3つのAutoLISP関数があります。
start_list で始まり、add_list で選択肢を足して、end_listで終わります。
start_listには、その選択肢を入れるポップアップリストタイルのキーを引数として渡します。
キーが”PLのタイルに選択肢 A B C を設定するコードです。
(start_list "PL") (add_list "A") (add_list "B") (add_list "C") (end_list)
関数 set_tile
キーが”PL”のタイル用のポップアップ用の選択肢が完成したら、他のタイル同様、set_tileで初期値をセットします。
ポップアップリストの場合は、値そのものではなく順番を入れます。
0から始まるので注意してください。そして、DCLとやり取りするときは数値ではなくすべて文字列です。” ” を忘れずに。
この場合、初期値が”A”なら”0″ ”B”なら”1″ ”C”なら”2″です。
(set_tile "PL" "0")
これで、Aが初期値としてポップアップリストに表示されます。
値を受け取る
OKボタンが押されるとget_tileで値を受け取ります。
get_tileで値を受け取るときも、値ではなく順番で戻ります。
なので、順番から値に変換するコードが必要です。
ここでは、関数cond を使って選択肢 A B C に戻します。
(cond ((= PL "0") (setq Op "A")) ((= PL "1") (setq Op "B")) ((= PL "2") (setq Op "C")) );cond
リスト操作と組み合わせる
ポップアップリストに選択肢を加える、そして選択されたダイアログボックスの戻り値から、値に変換する。
この一連の流れは、実はリスト操作と組み合わせるともっと楽になります。
ここでいう ”リスト”とは、ポップアップリストのリストとは関係なく、値をひとまとめにしたものです。
リスト操作とはどんなものなのかはコチラを。
まとめ
- DCLタイルの :popup_list はポップアップリストを表示させる。
- AutoLISP関数 start_list add_list end_list でポップアップリストに入れる選択肢を定義する。
- set_tile で設定する初期値は選択肢ではなく0から始まる順番を指定する。
- get_tileでダイアログボックスから受け取る値も、選択肢ではなく順番。
- DCLとやり取りするときは数値ではなく文字列。選択肢の順番にも” ”を付ける。
Comments