定义对话框
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对话框
一、DCL 文件结构
DCL 文件按照树型结构方式定义对话框,其中树型结构顶端的(dialog) 控件用于定义对话框本身。AutoCAD 提供的base.dcl和acad.dcl 文件被放置在AutoCAD 的support 目录下。创建对话框时,必须针对应用程序新建一个DCL 文件。所有定义的DCL 文件都可以使用base.dcl 中定义的控件。通过include directive,DCL 文件可以使用在其他DCL 文件中定义的控件。include directive 的格式如下:
@include filename
其中,filename 是用引号括起的其他DCL 文件的完整文件名(包括.dcl扩展名)。例如,以下样例引用一个名为usercore.dcl 的DCL 文件:
@include "usercore.dcl"
注意不能使用@include "acad.dcl",也不能使用在acad.dcl 文件中定义的对话框。但是,如果要创建与其中某些对话框类似的对话框,可以将其定义复制并粘贴到自己的DCL 文件中。
DCL文件可以包含一个或多个对话框的描述,或者只包含供其他DCL文件使用的控件原型或组件。
1、DCL 语法
控件定义格式如下:
name : item1 [ : item2 : item3 ... ]
{
attribute = value; ...
}
其中,每一个item 都是前面已定义的控件。新控件(name) 继承了所有指定项目(item1, item2, item3, ...) 的属性,同时新控件还继承(或添加)大括号({}) 中的属性,如果属性名已经存在,则替换继承的定义。如果多个父定义中指定了一个同名属性,则使用第一个遇到的属性作为新定义控件的属性。
如果新定义的控件不包含子定义,则为一个控件原型。引用此控件原型时,可以修改或添加其属性。如果新定义的控件是一个带有子定义的组件,引用此组件时,不能修改其属性。
控件或控件原型的name 只能由字母、数字或下划线( _ ) 组成,但必须以字母开始。控件名是区分大小写的。例如,bigbutton 与BigButton 或BIGBUTTON 可以用来表示不同的控件名。
以下是按钮控件的(内部)定义:
button : tile {
fixed_height = true;
is_tab_stop = true;
}
base.dcl 文件中对此引申定义了一个default_button:
default_button : button {
is_default = true;
}
default_button 继承了button 控件的fixed_height 和is_tab_stop 属性数值。同时增加了一个新的属性:is_default,并将其属性值设置为:true。
注意:在一个对话框里is_default = true; 和is_cancel = true; 两者至少要有一个。
2、控件引用格式如下:
name; 或者: name { attribute = value; . . . }
其中name是前面已定义控件的名称。控件名是区分大小写的。对于第一种引用方式,所有定义在name 中的属性均被使用。对于第二种引用方式,大括号中的属性及其数值可以用来添加新的属性或替换从name 中继承的属性。由于是控件引用,因此,其属性的改变仅适用于这一次引用本身。
注意对于第二种引用方式,只能引用控件原型,而不能引用组件。
在对话框定义中,spacer控件仅用于调整布局。没有属性值,所以,只能使用第一种格式对其进行引用:spacer;
base.dcl 文件中定义的ok_cancel 控件是一个组件,对它的引用也只能按照第一种格式进行:ok_cancel;
与此相反,您还可以重定义一个独立控件的属性值。例如,如果要创建一个具有相同特性但具有不同文本内容的按钮,可以如下定义:
: retirement_button { label = "Goodbye"; }
在控件定义或引用的大括号中,可以使用以下格式为控件指定属性或赋值:
attribute = value ;
其中,attribute 是一个有效的关键字,value 是分配给该属性的数值。等号(=) 用于分隔属性和属性值,分号(;) 标识赋值结束。与控件名一样,属性名和属性值也是区分大小写的。例如,Width 和width 表示不同的属性,而True 和true 表示不同的属性值。
双斜杠及双斜杠直至行尾的内容被视为注释而忽略。
二、增加一个简单的对话框所需的步骤
AutoLISP 提供了下列用于打开和关闭对话框的函数。
done_dialog new_dialog term_dialog
load_dialog start_dialog unload_dialog
在调用这些对话框函数前,首先应该用一个DCL 文件定义一个对话框。
例:
dia1: dialog {
label = "My Dialog Box ";
spacer; //相当于分行命令
: text { label = "Hello come in."; }
:row{ //相当于分列命令
: button { //第一列
key = "accept"; // key 参数。他是触发控件动作的关键字
label = "第一列";
is_default = 0;
fixed_width = true;
alignment = centered;
}
: text { label = "第二列"; }
: button { // 第三列
key = "cancel";
label = "第三列";
is_cancel = true;
fixed_width = true;
alignment = centered;
}
}
spacer;
: text { label = "end"; }
}
将其存到某一目录下比如F:/dia.dcl。或放到“支持文件列表包含的目录”下。
1、显示一个对话框
用下列步骤显示一个对话框
(defun c:call1( / dcl_id1 )
(setq mych "ok")
(setq dcl_id0 (load_dialog "F:/dia.dcl")) ;加载DCL 文件
(if (not (new_dialog "dia1" dcl_id0))(exit)) ;初始化对话框,若不正确就退出
(action_tile
"accept"
"(progn (sub02))"
)
(action_tile
"cancel"
"(progn (sub01))"
)
(start_dialog) ;显示对话框
(unload_dialog dcl_id0)
)