+CADLabo.comCAD / LISP / AUTOMATION
DCL解説

DCL入門2|文字入力欄を作り、横に並べる

DCLで入力画面を作るのTips一覧
要点

edit_boxで文字を入力する欄を作ります。keyで部品に名前を付け、rowで横に並べる方法まで確認します。

始める前に

先に確認すると読み進めやすい記事:

確認の手順

  1. 基本のDCLにedit_boxを追加します。
  2. 入力欄のkeyと、LISP側で指定するkeyを同じ名前にします。
  3. 文字を入力できるか、練習用のダイアログを表示して確認します。
  4. rowを使って部品を横に並べ、幅と配置を調整します。

タイルとは?

DCLでは、ダイアログボックスの中に配置される各ユーザーインターフェースの部品(ボタン、入力欄、ラベルなど)を「タイル(tile)」と呼びます。HTMLでいう <input> や <button> のようなものですね。

代表的なタイルの種類

タイル名

機能

用途例

edit_box

文字列入力欄

名前、数値など

toggle

ON/OFF切り替え

設定の有効化

list_box

選択肢表示

プリセット選択

button

ボタン動作

実行、閉じるなど

text

ラベル表示

説明文や見出し

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:実行してみよう

  1. inputdlg.dcl を AutoCAD のサポートパスに配置。

  2. inputname.lsp をロード。

  3. コマンドラインで 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/キャンセルボタンを自動配置。

レイアウト調整の属性

属性名

説明

例

width

タイルの横幅を指定

width = 20;

fixed_width

幅を固定するかどうか

fixed_width = true;

alignment

左寄せ・中央・右寄せ

alignment = centered;

これらをタイル内に記述することで、横並びの見た目を微調整できます。

まとめ

DCLの「タイル構造」を理解することで、AutoCADに柔軟なUIを追加できるようになります。edit_box で説明しましたが、入力した文字をlispで受け取って計算やkeyに使用したりも発展させることもできます。

結果の確認

入力欄へ文字を入力でき、部品が意図した順序で並んでいるか確認します。入力値を処理へ渡す方法はDCL入門3で扱います。

対象環境・動作確認

AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。