DCL入門2|文字入力欄を作り、横に並べる
edit_boxで文字を入力する欄を作ります。keyで部品に名前を付け、rowで横に並べる方法まで確認します。
始める前に
先に確認すると読み進めやすい記事:
確認の手順
- 基本のDCLにedit_boxを追加します。
- 入力欄のkeyと、LISP側で指定するkeyを同じ名前にします。
- 文字を入力できるか、練習用のダイアログを表示して確認します。
- rowを使って部品を横に並べ、幅と配置を調整します。
タイルとは?
DCLでは、ダイアログボックスの中に配置される各ユーザーインターフェースの部品(ボタン、入力欄、ラベルなど)を「タイル(tile)」と呼びます。HTMLでいう <input> や <button> のようなものですね。
代表的なタイルの種類
|
タイル名 |
機能 |
用途例 |
|---|---|---|
|
|
文字列入力欄 |
名前、数値など |
|
|
ON/OFF切り替え |
設定の有効化 |
|
|
選択肢表示 |
プリセット選択 |
|
|
ボタン動作 |
実行、閉じるなど |
|
|
ラベル表示 |
説明文や見出し |
edit_box はタイルの一種
: edit_box {
key = "username";
label = "名前";
value = "";
}この構文は、ユーザーが文字列を入力できる「入力欄タイル」を定義しています。
-
edit_box:タイルの種類(入力欄) -
key:AutoLISP側で値を取得するための識別名 -
label:入力欄の左に表示されるラベル -
value:初期値(空欄にしたい場合は"")
Step 1:DCLファイルを作成する
まずは、ダイアログのUIを定義するDCLファイルを作成します。以下の内容を inputdlg.dcl という名前で保存してください。
inputdlg : dialog {
label = "名前を入力してください";
: edit_box {
key = "username";
label = "名前";
value = "";
}
ok_cancel;
}-
inputdlg:ダイアログの識別名。AutoLISP側で呼び出すときに使います。 -
ok_cancel:OKとキャンセルボタンを自動で配置します。
Step 2:AutoLISPコードを書く
次に、DCLを呼び出して入力値を取得するAutoLISPコードです。以下を inputname.lsp として保存し、AutoCADにロードしてください。
(defun C:getname ( / dcl_id result name )
(setq dcl_id (load_dialog "inputdlg.dcl"))
(if (not (new_dialog "inputdlg" dcl_id))
(prompt "DCLの読み込みに失敗しました。")
)
(action_tile "username" "(setq name $value)") ; 入力値を取得
(action_tile "accept" "(done_dialog 1)") ; OKボタン
(action_tile "cancel" "(done_dialog 0)") ; Cancelボタン
(setq result (start_dialog))
(unload_dialog dcl_id)
(if (= result 1)
(princ (strcat "入力された名前: " name))
(princ "キャンセルされました。")
)
(princ)
)Step 3:実行してみよう
-
inputdlg.dclを AutoCAD のサポートパスに配置。 -
inputname.lspをロード。 -
コマンドラインで
getnameと入力して実行。
すると、以下のようなダイアログが表示されます:
入力された名前は、コマンドラインに表示されます。
番外:タイルを横に並べるには row を使う!
DCLでは、複数のタイルを横並びにしたい場合、row というレイアウトコンテナを使います。
基本構文
inputdlg : dialog {
label = "横並びの例";
: row {
: edit_box {
key = "name1";
label = "名前1";
}
: edit_box {
key = "name2";
label = "名前2";
}
}
ok_cancel;}解説
-
: row { ... }の中に複数のタイルを記述すると、横方向に並びます。 -
edit_boxやbuttonなど、どんなタイルでも横並びにできます。 -
ok_cancelはダイアログ下部にOK/キャンセルボタンを自動配置。
レイアウト調整の属性
|
属性名 |
説明 |
例 |
|---|---|---|
|
|
タイルの横幅を指定 |
|
|
|
幅を固定するかどうか |
|
|
|
左寄せ・中央・右寄せ |
|
これらをタイル内に記述することで、横並びの見た目を微調整できます。
まとめ
DCLの「タイル構造」を理解することで、AutoCADに柔軟なUIを追加できるようになります。edit_box で説明しましたが、入力した文字をlispで受け取って計算やkeyに使用したりも発展させることもできます。
結果の確認
入力欄へ文字を入力でき、部品が意図した順序で並んでいるか確認します。入力値を処理へ渡す方法はDCL入門3で扱います。
対象環境・動作確認
AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。