画像ボタンタイルを並べて、ラジオボタンのように使う方法です。
予備知識
画像ボタンには、スライドを使います。
表示させるスライドを3枚用意し、SLIDE-A SLIDE-B SLIDE-C という名前で、サポートファイルの検索パス内のフォルダに保存してください。
スライドの作り方についてはコチラを。
DCL
画像を3つ並べたダイアログボックスを作ります。
Test_ImageRadio:dialog {label= "Image Dialog Box";
:image_button {key="A"; height=10; width=10; color=250; action="(TestAction 1)";}
:image_button {key="B"; height=10; width=10; color=250; action="(TestAction 2)";}
:image_button {key="C"; height=10; width=10; color=250; action="(TestAction 3)";}
ok_cancel;
}
画像ボタンを3つ並べただけのシンプルなレイアウトです。
ボタンが押されたときのアクションとして、自作関数 TestAction をaction 属性で設定しています。
DCLは、以下のAutoLISPプログラムで呼び出すので、JagaDCL.dclという名前で、サポートファイルの検索パス内のフォルダに保存してください。
AutoLISP
(defun c:test (/ dcl_id Act Tl)
(setq dcl_id (load_dialog "JagaDCL.dcl")) ;
(if (not (new_dialog "Test_ImageRadio" dcl_id))
(progn
(princ "***ダイアログボックスが見つかりません***")
(exit)
));if
;-----------------------------------------------------------
(TestAction 1)
;-----------------------------------------------------------
(action_tile "accept" "(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 "選択したのは: " Tl))
);act1
);cond
;-----------------------------------------------------------
(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun TestAction (Num)
(start_image "A")
(fill_image 0 0 (dimx_tile "A") (dimy_tile "A") 250)
(slide_image 0 0 (dimx_tile "A")(dimy_tile "A") "SLIDE-A")
(end_image)
(start_image "B")
(fill_image 0 0 (dimx_tile "B") (dimy_tile "B") 250)
(slide_image 0 0 (dimx_tile "B")(dimy_tile "B") "SLIDE-B")
(end_image)
(start_image "C")
(fill_image 0 0 (dimx_tile "C") (dimy_tile "C") 250)
(slide_image 0 0 (dimx_tile "C")(dimy_tile "C") "SLIDE-C")
(end_image)
(cond
((= 1 Num)(setq Tl "A"))
((= 2 Num)(setq Tl "B"))
((= 3 Num)(setq Tl "C"))
)
(mode_tile Tl 4)
);defun
AutoLISPの説明
コマンド Test
コマンド名は Test です。
(TestAction 1)
タイルの設定については、以下で説明する自作関数 TestAction を使っています。
初期値を1に設定しています。
(cond
((= Act 0) (princ "ユーザーキャンセル"))
((= Act 1) (alert (strcat "選択したのは: " Tl))
);act1
);cond
ダイアログボックスを閉じた後の設定です。
キャンセルボタンを押して終了した場合は、”ユーザーキャンセル” とコマンドラインに表示。OKボタンを押して終了した場合は、選択された記号をメッセージボックスで出します。
その他のダイアログを表示/閉じるの部分についてはコチラの記事を参考にしてください。
TestAction
画像ボタンタイルの設定は、自作関数 TestAction でダイアログボックスを表示させるプログラムとは別にしています。
まずは、TestAction の部分から見ていきます。
この関数では
- 3つの画像を読み込み直す。
- 引数として渡された、選択されたタイルの記号を変数 Tl に入れる。
- 選択されたタイルの色を反転する。
を設定しています。
(defun TestAction (Num)
TestAction を定義します。引数が入る変数 Num も設定しています。
Numには、選択したタイルごとに、A=1 B=2 C=3 の数字が入ります。
(start_image "A")
(fill_image 0 0 (dimx_tile "A") (dimy_tile "A") 250)
(slide_image 0 0 (dimx_tile "A")(dimy_tile "A") "SLIDE-A")
(end_image)
選択された画像は色を反転しているので、fill_image で塗りつぶし、slide_imageで画像を読み込みます。
この処理を3つすべての画像で行っています。
(cond
((= 1 Num)(setq Tl "A"))
((= 2 Num)(setq Tl "B"))
((= 3 Num)(setq Tl "C"))
)
条件式 cond を使い、引数として渡された数字が、1 なら”A”、2なら”B”、3なら”C” を変数 Tl に入れます。
(mode_tile Tl 4)
mode_tile で、引数にキーと4を渡すと、画像タイルの場合は色が反転します。
mode_tileの色反転以外のモードについてはまた別記事にします。
まとめ
- 画像ボタンを複数並べてラジオボタンのようにして使うことができる。
関連記事
イメージ(画像)ボタンのコマンド使用例です。です。
Comments