定义对话框

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

)

相关文档
最新文档