CADLabo.comCAD / LISP / AUTOMATION
DCL解説

DCL入門4|タイルの値・状態・動作を制御する

DCLで入力画面を作るのTips一覧
このページでわかること

画面を表示できたら、次は値や動きを変えてみましょう。set_tile、get_tile、action_tile、mode_tile、get_attrを使い、初期値・入力の読み取り・部品の状態を扱います。

まずはここから

初めての方は、こちらも読んでみてください。

順番に試してみましょう

  1. 操作したいタイルのkeyを確認します。
  2. set_tileで初期値を設定し、画面へ反映されるか確認します。
  3. get_tileとaction_tileで、入力値と操作の通知を確認します。
  4. mode_tileで部品の状態を切り替え、最後に関数早見表で役割を整理します。

タイル処理関数とは?

AutoLISPのDCL(ダイアログコントロール言語)で使われる「タイル処理関数」は、ダイアログボックス内の各部品(テキストボックス、ボタン、リストなど)を操作するための関数群です。

これらの関数を使うことで、

  • 初期値の設定
  • ユーザー入力の取得
  • ボタン操作への反応
  • 表示・非表示や使用可・不可の切り替え
  • 属性情報の取得

などが可能になり、より柔軟で使いやすいダイアログを作成できます。

set_tile:タイルに値を設定する

掲載コード
(set_tile "username" "cadlabo.com")
  • “username” は DCL側で定義した key
  • “cadlabo.com” は表示したい文字列
  • 主に edit_box や list_box に初期値を設定するのに使います

get_tile:タイルの現在値を取得する

掲載コード
(setq name (get_tile "username"))
  • ユーザーが入力した値を取得して、変数 name に格納
  • 取得される値は常に文字列です(数値に変換するには atoi や atof を使う)

action_tile:ユーザー操作に応じて処理を割り当てる

掲載コード
(action_tile "username" "(setq name $value)")
  • “username” タイルが変更されたときに $value を name に代入
  • $value はその時点のタイルの値を表す特殊変数
  • OKボタンなどに (done_dialog 1) を割り当てるのも定番です

mode_tile:タイルの状態(使用可・不可)を切り替える

掲載コード
(mode_tile "username" 1) ; 使用不可
(mode_tile "username" 0) ; 使用可能
  • 0:有効(通常使用可能)
  • 1:無効(グレーアウト)
  • 2:非表示(ただし一部のタイルのみ対応)

get_attr:タイルの属性値を取得する

掲載コード
(get_attr "username" "label")
  • “label” や “value” などの属性値を取得
  • 通常は get_tile で十分ですが、属性を細かく調べたいときに便利

実用例:名前入力ダイアログの処理

掲載コード
(defun C:getname ( / dcl_id result name )
  (setq dcl_id (load_dialog "inputdlg.dcl"))
  (if (not (new_dialog "inputdlg" dcl_id))
    (prompt "
DCL読み込み失敗")
  )
  (set_tile "username" "初期値") ; 初期表示
  (action_tile "username" "(setq name $value)") ; 入力取得
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (setq result (start_dialog))
  (unload_dialog dcl_id)
  (if (= result 1)
    (prompt (strcat "
入力された名前: " name))
    (prompt "
キャンセルされました。")
  )
  (princ)
)

まとめ:関数早見表

関数名役割例文
set_tile値を設定(set_tile "key" "value")
get_tile値を取得(get_tile "key")
action_tile操作時の処理を割り当て(action_tile "key" "(処理)")
mode_tile有効・無効、フォーカスなどを変更(mode_tile "key" 1)
get_attr属性値を取得(get_attr "key" "label")

できたかどうか、ここで確認

値を設定する関数、値を読む関数、操作を登録する関数を区別できることが目標です。new_dialogが成功した後にタイルを操作します。

参照資料

対象環境

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