前回の記事では、DCLファイルで edit_box
を使った入力フォームを作成しました。今回はその続きとして、ユーザーが入力した値をAutoLISP側で受け取り、処理する方法を解説します。
DCLとAutoLISPの連携の仕組み
DCLで定義した edit_box
は、AutoLISPから操作するために key
属性を持っています。この key
を使って、AutoLISP側で値を取得するには action_tile
関数を使います。
Step 1:DCLファイルの確認
まずは、前回作成した simpleedit.dcl
を再確認しておきましょう。
inputdlg : dialog {
label = "名前を入力してください";
: edit_box {
key = "username";
label = "名前";
value = "";
}
ok_cancel;
}
key = "username"
がポイント。AutoLISP側でこの名前を使って値を取得します。
Step 2:AutoLISPで値を受け取る
以下のコードでは、username
タイルから入力値を取得し、処理しています。
(defun C:getname ( / dcl_id result name )
(setq dcl_id (load_dialog "simpleedit.dcl"))
(if (not (new_dialog "inputdlg" dcl_id))
(prompt "\nDCLの読み込みに失敗しました。")
)
;; 入力値を取得するアクションを設定
(action_tile "username" "(setq name $value)")
;; OKボタンでダイアログを終了
(action_tile "accept" "(done_dialog 1)")
;; キャンセルボタンで終了
(action_tile "cancel" "(done_dialog 0)")
;; ダイアログを表示
(setq result (start_dialog))
(unload_dialog dcl_id)
;; 入力結果を処理
(if (= result 1)
(progn
(prompt (strcat "\n入力された名前は: " name))
;; ここに処理を追加可能(例:図面に文字を配置など)
(command "_.text" "j" "mc" (getpoint "\n配置位置を指定: ") 2.5 0 name)
)
(prompt "\nキャンセルされました。")
)
(princ)
)
入力された名前を図面上に文字として配置するには、以下のような処理を追加できます:
(command "_.text" "j" "mc" (getpoint "\n配置位置を指定: ") 2.5 0 name)
これを progn
の中に入れることで、入力された名前を図面に描画できます。こ

🔹 action_tile の基本説明
ここで初めて使ったaction_tileについて説明します。
action_tile
は、DCLダイアログ内の各UI要素(ボタン、テキストボックスなど)に対して、ユーザーの操作に応じた処理をAutoLISP側で定義するための関数です。
この関数は、次のような構文で使用されます:
(action_tile "キー" "処理式")
キー
はDCLファイルで定義されたUI要素の名前です。今回は”username”。処理式
は、ユーザーがそのUI要素を操作したときに実行されるAutoLISPコードです。
これにより、UIとAutoLISPのスクリプトを連携させることができます。
🔹 各行の役割と解説
(action_tile "username" "(setq name $value)")
→ DCL側で定義されたedit_box
のキー"username"
に対応するアクションです。ユーザーが入力した文字列($value
)をAutoLISP変数name
に代入します。(action_tile "accept" "(done_dialog 1)")
→ OKボタンが押されたときに、done_dialog
を呼び出してダイアログを終了します。戻り値として1
が返されるため、後続の処理で「OKが押されたかどうか」を判定できます。(action_tile "cancel" "(done_dialog 0)")
→ キャンセルボタンが押された場合の処理です。done_dialog
に0
を渡すことで、キャンセルされたことを示します。(setq result (start_dialog))
→ ダイアログを表示し、ユーザーの操作を待ちます。操作が完了すると、accept
またはcancel
に応じた戻り値(1
または0
)がresult
に格納されます。(unload_dialog dcl_id)
→ 使用したDCLダイアログをメモリから解放します。これにより、不要なリソースの消費を防ぎます。
まとめ
要素 | 役割 |
---|---|
key | DCL側の識別名(AutoLISPからアクセス) |
action_tile | タイルの値を取得・処理するための関数 |
$value | ユーザーが入力した値(文字列) |
start_dialog | ダイアログを表示し、ユーザー操作を待つ |
この仕組みを理解すれば、複数の入力欄や選択肢を組み合わせた本格的なUI設計にも応用できます。
コメント