DCLにおける「タイル」とは?
DCL(Dialog Control Language)では、ダイアログボックスのインターフェースを構成する部品を「タイル」と呼びます。これは、ユーザーに入力や選択を促すための機能で、用途に応じて使い分けることができます。たとえば、テキスト入力用のタイルや、複数の選択肢から選ばせたい場合のリストボックスなどがあります。
ここでは、代表的なタイルの種類とその役割について簡単に紹介します。
目次
edit_box
| 機能・役割 | 使用例・備考 |
|---|---|
| 文字列を入力する欄 | 名前や数値の入力に使用 |
構文例
: edit_box {
key = "username";
label = "名前";
value = "";
}

対応するLISPコード例
(setq dcl_id (load_dialog "sample.dcl"))
(if (not (new_dialog "main" dcl_id))
(exit)
)
(action_tile "username" "(setq user_input $value)")
(start_dialog)
(unload_dialog dcl_id)
button
| 機能・役割 | 使用例・備考 |
|---|---|
| ボタンを表示し、クリックで処理を実行 | 実行、閉じるなど |
構文例
: button {
key = "run";
label = "実行";
}

対応するLISPコード例
(action_tile "run" "(do-something)")
toggle
| 機能・役割 | 使用例・備考 |
|---|---|
| ON/OFFの切り替えスイッチ | チェックボックス的な使い方 |
構文例
: toggle {
key = "enable";
label = "有効にする";
value = "0"; ; 初期状態はOFF
}

対応するLISPコード例
(defun c:sample ()
(setq dcl_id (load_dialog "sample.dcl"))
(if (not (new_dialog "sample" dcl_id))
(progn
(unload_dialog dcl_id)
(princ)
)
)
;; ユーザー名の取得
(action_tile "username" "(setq user_input $value)")
;; トグルの状態取得
(action_tile "enable" "(setq toggle_state $value)")
;; 実行ボタンでダイアログ終了
(action_tile "run" "(done_dialog 1)")
;; OK/Cancelの処理
(setq result (start_dialog))
(unload_dialog dcl_id)
;; 結果に応じた処理(例)
(if (= result 1)
(progn
(prompt (strcat "\n名前: " user_input))
(prompt (strcat "\n有効状態: " (if (= toggle_state "1") "ON" "OFF")))
)
)
(princ)
)
list_box
| 機能・役割 | 使用例・備考 |
|---|---|
| 複数の選択肢を表示し、1つを選択 | プリセット選択など |
構文例
sample : dialog {
label = "動物選択";
: list_box {
key = "options";
label = "好きな動物を選んでください";
height = 3;
width = 20;
value = "0"; ; 初期選択(インデックス)
}
ok_cancel;
}

対応するLISPコード例
(defun c:sample ()
(setq dcl_id (load_dialog "sample.dcl"))
(if (not (new_dialog "sample" dcl_id))
(progn
(unload_dialog dcl_id)
(princ)
)
)
;; リストボックスに選択肢を追加
(start_list "options")
(add_list "いぬ")
(add_list "ねこ")
(add_list "くま")
(end_list)
;; 初期選択(インデックス0 = "いぬ")
(set_tile "options" "0")
;; 選択されたインデックスを取得
(action_tile "options" "(setq selected_index $value)")
;; ダイアログ開始
(setq result (start_dialog))
(unload_dialog dcl_id)
;; OKが押された場合のみ処理
(if (= result 1)
(progn
(setq animal_list '("いぬ" "ねこ" "くま"))
(setq selected_animal (nth (atoi selected_index) animal_list))
(prompt (strcat "\n選択された動物は: " selected_animal))
)
)
(princ)
)
popup_list
| 機能・役割 | 使用例・備考 |
|---|---|
| ドロップダウン形式の選択肢 | コンパクトな選択UI |
構文例
sample : dialog {
label = "動物選択";
: popup_list {
key = "options";
label = "好きな動物を選んでください";
height = 3;
width = 20;
value = "0";
}
ok_cancel;
}

対応するLISPコード例
(defun c:sample ()
(setq dcl_id (load_dialog "sample.dcl"))
(if (not (new_dialog "sample" dcl_id))
(progn
(unload_dialog dcl_id)
(princ)
)
)
;; 選択肢を追加
(start_list "options")
(mapcar 'add_list '("いぬ" "ねこ" "くま"))
(end_list)
;; 初期選択(インデックス0 = "いぬ")
(set_tile "options" "0")
;; ダイアログ開始
(setq result (start_dialog))
(unload_dialog dcl_id)
;; OKが押された場合のみ処理
(if (= result 1)
(progn
(setq selected_index (get_tile "options"))
(setq selected_animal (nth (atoi selected_index) '("いぬ" "ねこ" "くま")))
(prompt (strcat "\n選択された動物は: " selected_animal))
)
)
(princ)
)
radio_button
| 機能・役割 | 使用例・備考 |
|---|---|
| 複数の選択肢から1つだけ選ぶ(ラジオボタン) | グループ化して使う |
構文例
sample : dialog {
label = "動物選択";
: radio_column {
label = "好きな動物を選んでください";
: radio_button {
key = "dog";
label = "いぬ";
}
: radio_button {
key = "cat";
label = "ねこ";
}
: radio_button {
key = "bear";
label = "くま";
}
}
ok_cancel;
}

対応するLISPコード例
(defun c:sample ()
(setq dcl_id (load_dialog "sample.dcl"))
(if (not (new_dialog "sample" dcl_id))
(progn (unload_dialog dcl_id) (princ))
)
;; 各ラジオボタンの選択状態を取得
(action_tile "dog" "(setq selected_animal \"いぬ\")")
(action_tile "cat" "(setq selected_animal \"ねこ\")")
(action_tile "bear" "(setq selected_animal \"くま\")")
;; ダイアログ開始
(setq result (start_dialog))
(unload_dialog dcl_id)
;; OKが押された場合のみ表示
(if (= result 1)
(prompt (strcat "\n選択された動物は: " selected_animal))
)
(princ)
)
slider
| 機能・役割 | 使用例・備考 |
|---|---|
| スライダーで数値を調整 | 数値の直感的な調整に便利 |
構文例
sample : dialog {
label = "スライダー選択";
: slider {
key = "myslider";
label = "数値を選んでください";
min_value = 0;
max_value = 10;
small_increment = 1;
big_increment = 2;
value = "5"; // 初期値
}
ok_cancel;
}

対応するLISPコード例
(defun c:sample ()
(setq dcl_id (load_dialog "sample.dcl"))
(if (not (new_dialog "sample" dcl_id))
(progn (unload_dialog dcl_id) (princ))
)
;; スライダーの値を取得
(action_tile "myslider" "(setq slider_value $value)")
;; ダイアログ開始
(setq result (start_dialog))
(unload_dialog dcl_id)
;; OKが押された場合のみ表示
(if (= result 1)
(prompt (strcat "\n選択された値は: " slider_value))
)
(princ)
)
DCLタイルのまとめ
AutoCADのダイアログ設計において、**タイル(tile)**はUI部品の基本単位です。各タイルはユーザーとのインタラクションを担い、入力・選択・表示などの役割を果たします。以下に代表的なタイルとその特徴を紹介します。
📝 入力系タイル
- edit_box
文字列入力用のテキストボックス。keyを使って値を取得・設定できる。 - slider
数値を範囲内で選択するためのスライダー。min_value、max_value、valueなどで制御。 - image_button
画像付きのボタン。視覚的な操作性を高めたい場合に有効。
🔘 選択系タイル
- popup_list
ドロップダウン形式の選択肢。start_list→add_list→end_listで選択肢を追加。 - list_box
複数行の選択肢を表示。heightで表示行数を調整可能。 - radio_column / radio_row
ラジオボタンを縦または横に並べる。複数のradio_buttonを内包する必要がある。 - toggle
ON/OFFのスイッチ。value = "1"でON、"0"でOFF。
🖱 操作系タイル
- button
任意のラベル付きボタン。action_tileでクリック時の処理を定義。 - ok_cancel
OKとキャンセルの標準ボタンセット。自動でダイアログ終了処理を行う。
📐 レイアウト系タイル
- boxed_column / boxed_row
枠付きの縦・横レイアウト。グループ化に便利。 - spacer
空白スペースを挿入。UIの見た目調整に使用。
🧠 補足
DCLでは、タイル定義は必ず {} で囲む必要があります。構文ミスの多くはこの括弧の不足によるものです。
各タイルには必ず key を設定し、AutoLISP側で get_tile や action_tile を使って値を取得・制御します。
label はユーザーに表示される説明文です。
- タイル:UI部品そのもの(edit_box, button など)
- key:AutoLISPからそのタイルを操作するための名前タグ
