概要
ダイアログに文字列、整数、実数を入力します。
DCL
全ソース
//--------------------------------------
// MyEditBoxes
//--------------------------------------
MyEditBoxes : dialog {
key = "Title";
label = "";
initial_focus = "Edit1";
spacer;
//文字列の入力画面
: row {
fixed_width = true;
: column {
width = 24.76;
fixed_width = true;
spacer;
: text {
key = "Text1";
label = "";
}
}
: edit_box {
key = "Edit1";AutoLispで値を取り出す際の識別子
edit_width = 9.42;
fixed_width = true;
}
}
//整数の入力画面
: row {
fixed_width = true;
: column {
width = 24.76;
fixed_width = true;
spacer;
: text {
key = "Text2";
label = "";
}
}
: edit_box {
key = "Edit2";AutoLispで値を取り出す際の識別子
edit_width = 9.42;
fixed_width = true;
}
}
//実数の入力画面
: row {
fixed_width = true;
: column {
width = 24.76;
fixed_width = true;
spacer;
: text {
key = "Text3";
label = "";
}
}
: edit_box {
key = "Edit3";AutoLispで値を取り出す際の識別子
edit_width = 9.42;
fixed_width = true;
}
}
spacer;
ok_cancel;
}
解説
以下を、参照ください。
AutoLisp
全ソース
;-------------------------------------------------------------------
; c:MyEditBoxes - Dialog to edit text, integers, and real numbers
; Syntax: MyEditBoxes
;--------------------------------------------------------------------
(defun c:MyEditBoxes (/ Dcl_Id% Edit1$ Edit2$ Edit3$ Return#)
(print "MyEditBoxes")
(setq Dcl_Id% (load_dialog "test01.dcl"))
(new_dialog "MyEditBoxes" Dcl_Id%)
(set_tile "Title" "My Edit Boxes")
(set_tile "Text1" "Enter First Name")
(set_tile "Edit1" "Jon")
(set_tile "Text2" "Enter your Age")
(set_tile "Edit2" "27")
(set_tile "Text3" "Enter a Real Number")
(set_tile "Edit3" "3.14")
(action_tile "cancel" "(done_dialog 0)")
(action_tile "accept" "(getVariable)(done_dialog 1)")
(setq Return# (start_dialog))
(if (= Return# 1)
(progn
(print "--OKを押しました")
(print (strcat "edt1 = " Edit1$ ))
(print (strcat "edt2 = " Edit2$ ))
(print (strcat "edt3 = " Edit3$ ))
(print "--パラメータを取得しました")
)
)
; Unload Dialog
(unload_dialog Dcl_Id%)
)
(defun getVariable()
(setq Edit1$ (get_tile "Edit1"))
(setq Edit2$ (get_tile "Edit2"))
(setq Edit3$ (get_tile "Edit3"))
)
ダイアログのイベントハンドラ
- action_tile に”accept”、”cancel”に done_dialog を設定します。
- コールバックはdone_dialogと、OKの場合は1をキャンセルの場合には0を明示的に定義しなければなりません。
- OKボタン(accept)がクリックされた場合、getVariable関数を使ってローカル変数Edit1$~Edit3$に値を設定します。
- ダイアログの表示を行い(start_dialog)、ダイアログの終了結果をReturn#に受け取ります。Return#は action_tileで定義した番号です。
(action_tile "cancel" "(done_dialog 0)")
(action_tile "accept" "(getVariable)(done_dialog 1)")
(setq Return# (start_dialog))
(defun getVariable()
(setq Edit1$ (get_tile "Edit1"))
(setq Edit2$ (get_tile "Edit2"))
(setq Edit3$ (get_tile "Edit3"))
)
- Return# を受け取って、処理を分岐します。
- progn 関数を使用すると、1 つの式しか指定できない箇所で複数の式を評価できます。
- strcatは文字列連結の関数です。
(if (= Return# 1)
(progn
(print "--OKを押しました")
(print (strcat "edt1 = " Edit1$ ))
(print (strcat "edt2 = " Edit2$ ))
(print (strcat "edt3 = " Edit3$ ))
(print "--パラメータを取得しました")
)
)
printの使用例は、以下を参照ください。
Common Lisp 入門
xyzzy,xyzzy Lisp,Common Lisp,入門
表示名の設定
- ダイアログのタイトルに ” My Edit Boxes” を設定します。
- 1項目(Text1)に表示名”Enter First Name”を設定、”Edit1″に”Jon”を設定します。
- 2項目(Text2)に表示名”Enter your Ager Age”を設定、”Edit2″に”27”を設定します。
- 3項目(Text3)に表示名”Enter a Real Number”を設定、”Edit3″に”3.14”を設定します。
(set_tile "Title" "My Edit Boxes")
(set_tile "Text1" "Enter First Name")
(set_tile "Edit1" "Jon")
(set_tile "Text2" "Enter your Age")
(set_tile "Edit2" "27")
(set_tile "Text3" "Enter a Real Number")
(set_tile "Edit3" "3.14")
実行
実行方法は、こちらを参考にしてください。
実行結果
"--OKを押しました"
"edt1 = Jon"
"edt2 = 27"
"edt3 = 3.14"
"--パラメータを取得しました" nil
参考
AutoLISP