<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[AutoCAD DCL对话框编程教程：为LISP工具创建图形界面]]></title><description><![CDATA[<p dir="auto">&lt;p&gt;&lt;strong&gt;核心结论：DCL（Dialog Control Language）是AutoCAD的原生对话框语言，配合AutoLISP可以创建专业人机交互界面。通过DCL让你的LISP工具从命令行进化到可视化操作。&lt;/strong&gt;&lt;/p&gt;</p>
<p dir="auto">&lt;h3&gt;什么是DCL对话框？&lt;/h3&gt;</p>
<p dir="auto">&lt;p&gt;DCL是Autodesk为AutoCAD开发的对话框定义语言，使用纯文本文件（.dcl）描述对话框布局，由LISP程序加载和驱动交互。&lt;/p&gt;</p>
<p dir="auto">&lt;h4&gt;DCL的特点&lt;/h4&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;&lt;strong&gt;零依赖&lt;/strong&gt;：不需任何第三方库，AutoCAD原生支持&lt;/li&gt;<br />
&lt;li&gt;&lt;strong&gt;风格统一&lt;/strong&gt;：对话框与AutoCAD自身完全一致&lt;/li&gt;<br />
&lt;li&gt;&lt;strong&gt;极其轻量&lt;/strong&gt;：一个输入对话框只需10-20行代码&lt;/li&gt;<br />
&lt;/ul&gt;</p>
<p dir="auto">&lt;h3&gt;第一个DCL对话框&lt;/h3&gt;</p>
<p dir="auto">&lt;h4&gt;DCL文件（hello.dcl）&lt;/h4&gt;<br />
&lt;pre&gt;&lt;code&gt;<br />
hello : dialog {<br />
label = "LISP工具集";<br />
: text {<br />
label = "欢迎使用模具设计LISP工具集";<br />
}<br />
: button {<br />
label = "确定";<br />
key = "accept";<br />
is_default = true;<br />
}<br />
}<br />
&lt;/code&gt;&lt;/pre&gt;</p>
<p dir="auto">&lt;h4&gt;对应的LISP程序&lt;/h4&gt;<br />
&lt;pre&gt;&lt;code&gt;<br />
(defun c:HELLO ( / dcl_id )<br />
(setq dcl_id (load_dialog "hello.dcl"))<br />
(if (not (new_dialog "hello" dcl_id)) (exit))<br />
(action_tile "accept" "(done_dialog 1)")<br />
(start_dialog)<br />
(unload_dialog dcl_id)<br />
(princ)<br />
)<br />
&lt;/code&gt;&lt;/pre&gt;</p>
<p dir="auto">&lt;h3&gt;DCL控件类型大全&lt;/h3&gt;</p>
<p dir="auto">&lt;h4&gt;输入类控件&lt;/h4&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;&lt;td&gt;控件&lt;/td&gt;&lt;td&gt;用途&lt;/td&gt;&lt;td&gt;关键属性&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;edit_box&lt;/td&gt;&lt;td&gt;文本输入框&lt;/td&gt;&lt;td&gt;label, key, value, width&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;popup_list&lt;/td&gt;&lt;td&gt;下拉选择&lt;/td&gt;&lt;td&gt;label, key, list, value&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;list_box&lt;/td&gt;&lt;td&gt;多行选择&lt;/td&gt;&lt;td&gt;label, key, list, multiple_select&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;radio_button&lt;/td&gt;&lt;td&gt;单选按钮&lt;/td&gt;&lt;td&gt;label, key, value&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;check_box&lt;/td&gt;&lt;td&gt;复选框&lt;/td&gt;&lt;td&gt;label, key, value&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;slider&lt;/td&gt;&lt;td&gt;滑块调节&lt;/td&gt;&lt;td&gt;key, min_value, max_value&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;</p>
<p dir="auto">&lt;h4&gt;布局容器&lt;/h4&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;&lt;td&gt;容器&lt;/td&gt;&lt;td&gt;用途&lt;/td&gt;&lt;td&gt;说明&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;row&lt;/td&gt;&lt;td&gt;水平排列&lt;/td&gt;&lt;td&gt;一行内排列多个控件&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;column&lt;/td&gt;&lt;td&gt;垂直排列&lt;/td&gt;&lt;td&gt;一列内排列多个控件&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;boxed_row&lt;/td&gt;&lt;td&gt;带框水平组&lt;/td&gt;&lt;td&gt;带边框的组&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;boxed_column&lt;/td&gt;&lt;td&gt;带框垂直组&lt;/td&gt;&lt;td&gt;带边框的组&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;spacer&lt;/td&gt;&lt;td&gt;空白间距&lt;/td&gt;&lt;td&gt;调整布局间隔&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;</p>
<p dir="auto">&lt;h3&gt;实战案例：模具材料快速选择对话框&lt;/h3&gt;</p>
<p dir="auto">&lt;h4&gt;DCL文件&lt;/h4&gt;<br />
&lt;pre&gt;&lt;code&gt;<br />
steel_pick : dialog {<br />
label = "模具材料快速选择";<br />
: boxed_column {<br />
label = "模具类型";<br />
: popup_list {<br />
key = "mold_type";<br />
list = "注塑模具\n压铸模具\n冲压模具";<br />
value = 0;<br />
width = 30;<br />
}<br />
}<br />
: boxed_column {<br />
label = "推荐材料";<br />
: list_box {<br />
key = "steel_list";<br />
list = "P20(预硬钢)\n718H(高抛光)\nNAK80(镜面钢)\nS136H(不锈钢)\nH13(热作钢)\nCr12MoV(冷作钢)\nDC53(高速钢)";<br />
value = 0;<br />
width = 30;<br />
}<br />
}<br />
: boxed_column {<br />
label = "参数设置";<br />
: edit_box {<br />
label = "硬度要求：";<br />
key = "hardness";<br />
value = "HRC 48-52";<br />
}<br />
}<br />
spacer;<br />
ok_cancel;<br />
}<br />
&lt;/code&gt;&lt;/pre&gt;</p>
<p dir="auto">&lt;h4&gt;LISP驱动代码&lt;/h4&gt;<br />
&lt;pre&gt;&lt;code&gt;<br />
(defun c:STEELPICK ( / dcl_id )<br />
(setq dcl_id (load_dialog "steel_pick.dcl"))<br />
(if (not (new_dialog "steel_pick" dcl_id)) (exit))</p>
<p dir="auto">;; 模具类型切换时更新钢材列表<br />
(action_tile "mold_type" "(update_steel $value)")</p>
<p dir="auto">(action_tile "accept" "(done_dialog 1)")<br />
(action_tile "cancel" "(done_dialog 0)")</p>
<p dir="auto">(if (= (start_dialog) 1)<br />
(progn<br />
(setq steel (get_tile "steel_list"))<br />
(setq hardness (get_tile "hardness"))<br />
(princ (strcat "\n推荐钢材: " steel " 硬度: " hardness))<br />
)<br />
)<br />
(unload_dialog dcl_id)<br />
(princ)<br />
)</p>
<p dir="auto">(defun update_steel (type)<br />
(start_list "steel_list")<br />
(cond<br />
((= type "0") (add_list "P20")(add_list "718H")(add_list "NAK80"))<br />
((= type "1") (add_list "H13")(add_list "8407")(add_list "DAC"))<br />
((= type "2") (add_list "Cr12MoV")(add_list "DC53")(add_list "SKD11"))<br />
)<br />
(end_list)<br />
)<br />
&lt;/code&gt;&lt;/pre&gt;</p>
<p dir="auto">&lt;h3&gt;DCL进阶技巧&lt;/h3&gt;</p>
<p dir="auto">&lt;h4&gt;滑块与数值联动&lt;/h4&gt;<br />
&lt;pre&gt;&lt;code&gt;<br />
(action_tile "slider_hardness"<br />
"(set_tile "txt_hardness" (strcat "HRC " $value))")<br />
&lt;/code&gt;&lt;/pre&gt;</p>
<p dir="auto">&lt;h4&gt;临时生成DCL文件&lt;/h4&gt;<br />
&lt;pre&gt;&lt;code&gt;<br />
;; 在LISP中动态写DCL文件，避免依赖外部文件<br />
(setq fname (vl-filename-mktemp "temp.dcl"))<br />
(setq file (open fname "w"))<br />
(write-line "temp_dlg : dialog {" file)<br />
(write-line "  label = "动态对话框";" file)<br />
(write-line "  : edit_box { key = "input"; label = "输入："; }" file)<br />
(write-line "  spacer; ok_cancel;" file)<br />
(write-line "}" file)<br />
(close file)<br />
&lt;/code&gt;&lt;/pre&gt;</p>
<p dir="auto">&lt;h3&gt;完整工具：图框自动填写&lt;/h3&gt;</p>
<p dir="auto">&lt;pre&gt;&lt;code&gt;<br />
(defun c:FILLTITLE ( / dcl_id fname file)<br />
;; 生成临时DCL<br />
(setq fname (vl-filename-mktemp "fill.dcl"))<br />
(setq file (open fname "w"))<br />
(write-line "filltitle : dialog {" file)<br />
(write-line "  label = "图框填写工具 v1.0\</p>
<hr />
<p dir="auto">这个参数你们一般设多少？评论区说说。<br />
&lt;/code&gt;&lt;/pre&gt;</p>
]]></description><link>https://forum.mj7.cn/topic/8093/autocad-dcl对话框编程教程-为lisp工具创建图形界面</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 23:29:31 GMT</lastBuildDate><atom:link href="https://forum.mj7.cn/topic/8093.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 May 2026 14:39:50 GMT</pubDate><ttl>60</ttl></channel></rss>