对话框设计技术_第1页
对话框设计技术_第2页
对话框设计技术_第3页
对话框设计技术_第4页
对话框设计技术_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对话框设计技术第一页,共五十七页,编辑于2023年,星期日6.1对话框的组成对话框的特点:对话框是用对话框控制语言DCL(dialogcontrollanguage)编写的ASCII文件定义的。使用DCL描述对话框的组成构件、构件布局形式和构件的初始状态,形成一个对话框定义文件(扩展名为DCL)。对话框的设计是以约束条件为基础的,框的尺寸及布局均遵循统一规则,用户不需指定每一部分尺寸大小及定位关系,系统自动进行布置。一个对话框由位于其中的构件组成,构件(tile)就是构成对话框的部件。这些构件按其功能可以分为六类。第二页,共五十七页,编辑于2023年,星期日表构件的类型及其相应的构件类型组成构件预定义动作构件button,dialog,editbox,imagebutton,listbox,popuplist,radiobutton,slide,toggle构件组column,boxedcolumn,row,boxedrow,radiocolumn,boxedradiocolumn,radiorow,boxedradiorow修饰和说明列image,text,spacer正文聚合textpart,concatenation,paragraph对话框退出按钮ok,okandcancel,okcancelhelp,okcanelhelpinformation出错构件errortile,okcancelhelperrortile下表按构件的字母顺序列出了各类构件。表中各类预定义构件定义在\support\base.dcl文件中。第三页,共五十七页,编辑于2023年,星期日1.预定义的有效动作构件在构件组成中相当一部分构件的作用是供操作人员作出一定的决定并产生相应的操作,称为动作构件。(1)按钮(button)(2)编辑框(edit_box)(3)图象按钮(image_button)(4)列表框(list_box)(5)弹出表(popup_list)(6)单选按钮(radio_button)(7)滚动条(slider)(8)切换开关(toggle)第四页,共五十七页,编辑于2023年,星期日(1)按钮(button)

按钮是一种类似下压键的有效构件,其标号(label)指出按钮内出现的提示文本,适用于用户立即产生可视的操作,如退出对话框、进入子对话框及其它特定操作。三个常用按钮功能及产生的相应操作:OK,Cancel,Help。若要创建与OK相应的构件,该构件的关键字应为“accept”,并将其属性is_default设定为真(True)。

(2)编辑框(edit_box)

编辑框用于输入或编辑一行文字,其提示标号(label)显示在该框左边,当输入文本比编辑框长度长时,文本能自动水平向左滚动。

(3)图象按钮(image_button)

图象按钮是一种显示图象而不是文字的按钮,也称icon,pictrue或graph;按钮上的图象由AutoLISP或ADS程序驱动。AutoCAD中SETTING菜单下PointStyle所弹出的对话框中包含了与点类型相对应的图象按钮应用实例。第五页,共五十七页,编辑于2023年,星期日(4)列表框(list_box)

该构件包含若干行可供选择的文字所组成的表,供用户单击选择。通常表长是变的,当使用自动布局的对话框占用较大空间时,常将该构件制作成固定长度的列表框。用户选择表中的某一行时,该行会以醒目方式显示,当列表框包含的文本行数超出列表框纵向长度时,列表框右边的滚动条会自动激活,可拖动滚动条光标或通过按压箭头滚动显示文本信息。MULTIPLE_SELECT属性决定是否允许选择列表框中多行文本;标识(label)是显示在列表框上方的文字说明。第六页,共五十七页,编辑于2023年,星期日(5)弹出表(popup_list)

弹出表结合了编辑框和列表框两个概念,初始状态包括一行文字和一个向下的箭头,单击箭头会弹出包含全部文本的列表,选中后恢复到关闭状态,并在编辑框中显示出已选中的列表项内容。第七页,共五十七页,编辑于2023年,星期日(6)单选按钮(radio_button)

单选按钮为一组按钮,这些按钮由radio_column或radio_row组成,具有多选一的功能;该构件适用从一个表中选一项,而表中的各项彼此又是互斥的场合。第八页,共五十七页,编辑于2023年,星期日(7)滚动条(slider)

滚动条是一种直观控制数值的构件,用户可左右(上下)拖动滚动条指示器来获取相应值,返回值是以字符串方式表示的-32768至32767之间的一个整数。应用程序可根据需要设置最大值或最小值,如图为滚动条的应用示例。第九页,共五十七页,编辑于2023年,星期日(8)切换开关(toggle)

切换开关控制逻辑布尔值(“0”或“1”)。功能与radio_button相似。但toggle不和其它开关发生联系,因此同一行(或列)的toggle可以同时为“true”或“false”。如图中目标捕捉方式就是通过切换开关控件设定的。第十页,共五十七页,编辑于2023年,星期日2.构件组群彼此功能相关的构件组合在一起可以使对话框的布局更加合理、美观,通过行、列等组合方式可使原来独立的构件自动对齐。操作人员不能选择组群,只能选择组群中的有效动作构件进行操作,base.dcl文件中定义了几种标准组合方式供用户使用。

(1)列(column)、行(row)

列(行)是按照构件在DCL文件(对话框控制语言)中的顺序垂直(水平)列出的构件集合,可以包括别的构件组群和有效构件。

(2)有界列(boxed_column)、有界行(boxed_row)

该构件与列(行)功能相同,只不过有界列(行)四周有边框并可以带标识(单纯的列(行)不能带标识)。

(3)单选列(radio_column)、单选行(radio_row)

单选列(行)与其它组合方式不同,该构件应包括一定数目的单选钮,各单选钮之间互相排斥,其中只能有一个单选钮为“true”。

(4)有界单选列(boxed_radio_column)、有界单选行(boxed_radio_row)

有界单选列(行)概念与单选列(行)相同,但其四周可以有边框和标识。第十一页,共五十七页,编辑于2023年,星期日3.装饰性和信息性构件装饰性和信息性构件无任何操作,也不能被选择,主要用于显示信息、加强视觉效果或帮助对话框布局。

(1)图象(image)

图象构件是在一个矩形区域内显示向量、色彩填充或显示幻灯等图形的构件。如EntileSelectSetting对话框中的目标选择框是显示向量;Grips中的颜色选择是色彩填充;Points则是各种点标记的幻灯。

(2)文本(text)

文本构件通常用于标题或信息提示,大多数的报警框均包含该类构件。

(3)空白衬框(spacer)

此构件用于布局对所需的空间进行调整,它会影响邻接构件的相互位置及尺寸布局,由于PDB具有自动处理空白的能力,故通常不使用,仅在最终局部调整布局时才使用该构件。第十二页,共五十七页,编辑于2023年,星期日4.标准退出按钮

DCL文件中定义了四个常用的标准退出按钮,即缺省按钮“OK”,废弃退出按钮“Cancel”、求助对话框弹出按钮“Help…”和附加信息对话框弹出按钮“Info…”,如图所示。它们的标准原型由BASE.DCL文件定义如下:ok_button:retirement_button{label="OK";

key="accept";

is_default=true;

}cancel_button:retirement_button{label="Cancel";

key="cancel";

is_cancel=true;

}help_button:retirement_button{label=“Help…”;

key="help";

mnemonic="H";

}info_button:retirement_button{label="Info…";

key="info";

mnemonic="I";

}第十三页,共五十七页,编辑于2023年,星期日

用户在设计对话框时,应尽量选用标准退出组件,如果不能满足需要,可由标准退出按钮进行组合,生成对话框退出组件。下面介绍的四种标准退出组件,用户可以在设计对话框时直接引用。它们是“ok_only”、“ok_cancel”、“ok_cancel_help”和“ok_cancel_help_info”。通过下面的介绍,可以了解利用退出按钮定义退出组件的方法。(1)退出组件ok_only的定义如下:

ok_only:column{fixed_width=true;

alignment=centered;:ok_button{is_cancel=true;

}}(2)退出组件ok_cancel的定义如下:

ok_cancel:column{

:row{fixed_width=true;

alignment=centered;

ok_button;:spacer{width=2;}cancel_button;

}}第十四页,共五十七页,编辑于2023年,星期日(3)退出组件ok_cancel_help的定义如下:ok_cancel_help:column{

:row{fixed_width=true;

alignment=centered;

ok_button;:spacer{width=2;}cancel_button;:spacer{width=2;}help_button;

}}(4)退出组件ok_cancel_help_info的定义如下:

ok_cancel_help_info:column{

:row{fixed_width=true;

alignment=centered;

ok_button;:spacer{width=2;}cancel_button;:spacer{width=2;}help_button;:spacer{width=2;}info_button;

}}第十五页,共五十七页,编辑于2023年,星期日6.2对话框构件的属性

属性(attribute)用来控制对话框构件的设置,如同编程语言中的变量,包含名字和值两部分内容。属性的数据类型必须是下列四种数据类型之一。

(1)整型:通常表示距离,如构件高度和宽度,用字符高度和宽度单位的整数倍表示。

(2)实数型:也可表示距离属性,注意实数的小数点前一定要有数字,例如0.1,不能表示为.1。

(3)字符串:由双括号括起的文本或转义符,下表给出了DCL识别的转义符意义。转义符字符意义\"引号\\反向斜杠\t水平制表符\n换行符(4)保留字:DCL语言预定义的具有特殊意义的字符串,需用小写字母表示,并对字母的大小写敏感。预定义属性是已经定义了的、在对话框设计过程中可直接使用的属性。下表给出了部分预定义属性的分类。第十六页,共五十七页,编辑于2023年,星期日类属性名相关构件说明关键字和值属性Key所有构件构件名称Value文本、激活的构件(除去按钮和图象按钮)构件的初始值布局与尺寸属性List列表、弹出表显示表中的初始值max_value滚动条滚动条最大值min_value滚动条滚动条最小值Alignment全部构件组群中水平、垂直方向对齐方式aspect_ratio图象、图象按钮图象长宽比Color图象、图象按钮图象背景色edit_limit编辑框用户可输入的最大字符串长度edit_width编辑框、弹出表构件中编辑部分的宽度Height全部构件构件高度Width全部构件构件高度布局与尺寸观感属性is_bold文本是否用黑体方式Label单选行、单选列、有界行、有界列、有界单选行、有界单选列、对话框、列表框、弹出表、单选按钮、文本、切换开关构件的标记动作响应属性Action全部构件AutoLISP操作表达式allow_accept编辑框、图象按钮、列表框当选中该构件时,激活is_default按钮is_default按钮接受按钮,当输入Enter按钮时有效表预定义的构件属性分类第十七页,共五十七页,编辑于2023年,星期日1.关键字和值属性关键字和值属性是对话框设计中最重要的属性,它们提供了约束构件功能的数值。

(1)关键字(key)

关键字是一个包含在引号内的字符串。用户指定一个AutoLISP或ADS程序引用此特定构件的ASCII码,在一特定的对话框中,每个key值都是唯一的。

(2)值(value)

一个用于初始化构件的字符串,其值的含义由构件类型所决定。该属性值的变化不会影响到构件的尺寸和位置,在构件运行过程中,该值可通过用户输入或通过调用set_tile函数来改变,除按钮(包括图象按钮)以外的动作构件(如:text,list等)均需指定构件的初始化值。第十八页,共五十七页,编辑于2023年,星期日2.布局属性和尺寸属性此类属性值用于构件的布局和形状,下面对相应的属性作出说明。(1)宽度(width)和高度(height)该值表示构件的最小宽度和高度,数值类型是整数或实数型。(2)对齐属性(alignment)控制构件在组群空间内垂直或水平方向的定位方式。(3)子控件对齐属性(children_alignment)与alignment功能基本相同,只不过它只确定所有子组群内部的定位方式,构件自身的alignment属性优先于该值。(4)固定高度(fixed_height)和固定宽度(fixed_width)当这二个属性值为true时,布局时将保持构件的大小固定不变,默认值为false。(5)子控件固定高度(chileren_fixed_height)和子控件固定宽度(children_fixed_width)功能与(4)相同,不过它是构件组群的属性,只作用于组群内所有的构件并作为缺省值,默认值为false,优先级较(4)的属性低。第十九页,共五十七页,编辑于2023年,星期日3.功能属性功能属性定义了动作构件的用途和操作。因为修饰和说明构件是非动作构件,故不需要功能属性。(1)action

该属性包含一个AutoLISP有效表达式组成的字符串,当选中构件时,执行相应的AutoLISP表达式操作,AutoCAD提供AutoLISP和ADS驱动程序来设定构件的动作。注意不能用C语言指定action属性。(2)is_enabled

该属性设置构件的有效性,默认值为true。当is_enabled属性为false时,构件无效(变灰),只可见而不可选。(3)is_tab_stop

该属性控制一个部件是否可以用制表键(Tab)选择聚焦,默认值为true。(4)mnemonic

该属性定义了快速聚焦于相应构件的热键(即助记符),助记符通常是构件标识中带下划线的字母。助记符须符合下列规则:该属性值必须是ASCII的单个字符,如“A”。同时该字符必须是构件标识中的字符。助记符在DCL文件中必须用大写字母。第二十页,共五十七页,编辑于2023年,星期日4.预定义构件属性(1)独立构件1)按钮(button)

包含三个属性:label,is_cancel,is_default。

label是一个由引号括起来的字符串,出现的按钮框内的文本标记(无缺省)。

is_cancel可为true或false。若为true,则所选中的按钮与按取消键(如ESC或CTRL+C)作用相同;对话框中只能有一个按钮的is_cancel为true,且该按钮应在操作回调动作完成后终止对话框。

is_default值也可为true或false。若为true,其作用与按接受键(如Enter)相同;通常该按钮应以一种与众不同的方式显示。对话框中只能有一个按钮可置is_default为真(true)。※如图所示对话框中的按钮定义如下::button{key="accept";

label="按此按钮";

is_default=true;

}第二十一页,共五十七页,编辑于2023年,星期日2)对话框(Dialog)

包含三个属性:label,value,initial_focus。

label显示对话框的标题文本,缺省为空。

value与label一样,值属性将字符串当作一个可选择的对话框标题显示,该值在布局时不作检查,因此应确定对话框有足够的宽度来满足该值的要求。使用set_tile函数可以动态地改变对话框的标题。

initial_focus指明对话框内初始聚焦的构件。※例如::dialog{

label="对话框示例";……}第二十二页,共五十七页,编辑于2023年,星期日3)编辑框(Edit_box)

包含五个属性:label,allow_accept,edit_width,edit_limit,value。

label为显示在编辑框左边的标识文本。

allow_accept是逻辑型值(true或false)。当该值为true时,用户按下接受键(如Enter或双击鼠标等),就如同激活了缺省按钮(is_default为true的按钮)。

edit_width控制编辑框的宽度,该值缺省值为0时,宽度不固定,编辑框可根据需要自动扩充到整个可用空间,当该值为非零值时,该框右对齐,控制编辑框宽度,并在标识和编辑框之间保留一个空格。

edit_limit为编辑框中允许输入的最多字符数,默认为132个,最大可达256个字符。

value为编辑框中的初始文本字符串。※如图所示对话框中的编辑框定义如下::edit_box{

key="test_text";label="编辑框";value="0";edit_limit=12;//限制编辑框最大的输入字数

edit_width=25;//输入区宽度

}第二十三页,共五十七页,编辑于2023年,星期日4)列表框(List_box)

包含六个属性:label,allow_accept,list,multiple_select,tabs,value。

label为显示在列表框上方的标识字符串。

allow_accept意义与Edit_box中allow_accept属性相同。

list为表中显示表项内容(字符串),行间用“\n”分隔,行内用制表符“\t”分隔。

multiple_select为是否允许一次选择表中多个选项的控制逻辑值(true或false),缺省值为false。

tabs包含整数或实数,并由空格分开的字符串,每一个数均表示相应的制表站(tabs)所处的位置。以确定制表符“\t”的文本列的位置。

value是初始选择的列表项的索引值,如value=“02”,分别表示初始选中第1,3行,该值缺省为空“”。※如图所示对话框的列表框定义如下::list_box{

key="test_list_box";

multiple_select=true;//显示选单中能否多选

label="列表框应用";list="轴类零件\n盘盖类零件\n叉件类零件";}第二十四页,共五十七页,编辑于2023年,星期日5)弹出表(Popup_list)

包含五个属性:label,edit_width,list,tabs,value。

label为显示在弹出表左边的标识字符串。

edit_width为编辑框或弹出表的宽度,与edit_box作用相同;缺省或为零时,该构件宽度可扩展到整个可用空间。

list、tabs、value与list_box相应属性意义作用相同。

6)图象按钮(Image_button)

包含三个属性:allow_accept,aspect_ratio,color。

allow_accep是一逻辑型值(true或false)。当为true时,选中该构件等同于同时选中缺省按钮;缺省为false。

aspect_ratio为图象的长宽比,若为零,则构件即为图象的原有大小。

color为图象的背景色(填充色)。※如图所示对话框中的弹出表定义如下::popup_list{key="test_popup_box";

edit_width=20;

label="选择零件";

list="轴类零件\n盘盖类零件\n叉架类零件";

}第二十五页,共五十七页,编辑于2023年,星期日7)单选按钮(radio_button)

包含二个属性:label,value。

label为单选按钮右边的标记文本。

value为单选钮是否被选中的标志:“1”表示被选中;“0”表示不选中。当用户将多个单选钮置为“1”时,只有最后一个单选钮被选中。

8)单选列组(radio_column)、有界单选列组(boxed_radio_column)

包含二个属性:value,label(只有boxed_radio_column有此属性)。

value为当前被选中(value=“1”)的关键字字符串。

label为显示在boxed_radio_column左上方的标记文本。

9)单选行组(radio_row)、有界单选行组(boxed_radio_row)

包含二个属性:value,label(只有boxed_radio_row有此属性)。

value为当前被选中(value=“1”)的关键字字符串。

label为显示在boxed_radio_row左上方的标记文本。※例如::boxed_radio_column{label="选择零件";:radio_button{label="轴类零件";value="1";}:radio_button{label="盘盖类零件";}:radio_button{label="叉件类零件";}}第二十六页,共五十七页,编辑于2023年,星期日10)滚动条(slide)

包含六个属性:big_increment,small_increment,layout,max_value,min_value,value。

big_increment,small_increment控制滚动条增量使用值的整数,取值范围在min_value和max_value之间。其中big_increment的缺省值是整个范围的1/10;small_increment的缺省值是整个范围的1/100。

layout为滚动条的放置方向(水平或垂直),缺省为水平方向。

max_value,min_value是-32768~32767之间的整数,表示滚动条返回值的范围。缺省min_value为0;缺省max_value为10000。

value为包含当前滚动条数值(整数)字符串。※例如::slider{ key="slider_abc";min_value=1; //滑动条最小值

max_value=26; //滑动条最大值

width=30; //滑动条宽度

height=1; small_increment=1; //滑动条外箭头位移量

big_increment=1; //滑动条内位移量

}第二十七页,共五十七页,编辑于2023年,星期日(2)修饰及说明构件

1)文本(text)

包含三个属性:label,value,is_bold。

label为显示的文本内容。

value如label一样也表示文本构件的显示内容,但它对构件的布局不发生影响。若试图将文本信息静态表示,直接在label中指定内容即可,若试图在运行过程改变这些信息,可用value指定它,并用一足够长的width来包含将来可能赋给value的字符串长度;一旦布局完成,该文本的尺寸就不能改变,当发生大于限定宽度的字符串对value赋值时,显示文本将被自动截断。

is_bold为一逻辑值(true或false),控制是否以黑体字显示,缺省为false。※例如::text{label="A←英文字→Z";}第二十八页,共五十七页,编辑于2023年,星期日2)图象(image)

包含二个属性:color,aspect_radio。有关的属性与Image_button说明相同。

3)空白衬框(spacer)

只具有“布局属性和尺寸属性”。

※例如:

:image_button{key="test_image_button";aspect_ratio=1.5;//图象高度/宽度比值

color=1;alignment=right;}(3)聚合构件组群属性列(column)、行(row)

此二构件只具有“布局属性和尺寸属性”。有界列(boxed_column)、有界行(boxed_row)

属性label表示显示在该构件左上方的标记文本。其余属性均为“布局属性和尺寸属性”。第二十九页,共五十七页,编辑于2023年,星期日6.3对话框控制语言和设计原则

在AutoCAD环境下运行的面向对话框的应用程序由两部分组成:①DCL对话框文件:用对话框控制语言(DCL)来描述对话框的组成构件、构件的布局形式和构件的初始状态,形成一个对话框定义文件。②LISP驱动程序:用扩充了对话框操作语句的AutoLISP语言编写对话框及其构件的驱动程序,负责对话框定义文件的装入、对话框的弹出、隐藏和退出,以及当用户激活构件时每个构件所产生的动作,建立一个对话框驱动文件(.LSP)。第三十页,共五十七页,编辑于2023年,星期日1.DCL文件结构对话框是由构件组成的树状结构,对话框控制语言DCL是描述树的ASCII文本文件(扩展名为.DCL)。文件中可以包括一个或多个对话框的描述及其构件的定义,也可以包含来自其它DCL文件的构件定义。BASE.dcl文件是标准对话框,也是用户定义对话框的标准零部件库或工具箱。对话框文件ACAD.dcl包含了AutoCAD所使用的大部分标准对话框定义。DCL文件可以由以下三个部分组成:(1)引用其它DCL文件。格式为@include“user.dcl”用户应用程序不能直接引用ACAD.DCL文件,如果用户要定义类似的对话框,可用文本编辑程序把其中的相应部分剪贴到自己的DCL文件中。第三十一页,共五十七页,编辑于2023年,星期日(2)对话框的定义。格式为

dlgname:dialog{

对话框属性定义语句原型和子组件引用语句

}

其中,对话框的名字dlgname是必须指定的,可以由字母数字下划线组成,并由字母开头。字母一般全部使用小写,并不应与系统定义的用@include语句嵌入的其它DCL文件以及当前DCL文件定义的子组件和对话框重名。(3)构件的定义。格式为

tilename:item{attribute1=value1;

attribute2=value2;

…;

}

其中,tilename为构件名称,item表示构件原型名称,attribute是对构件的属性赋值。构件除了直接定义外,还可通过引用的方式来继承,新构件可根据需要修改或继承原先的属性。第三十二页,共五十七页,编辑于2023年,星期日例如,标准构件button的内部定义为:

button:tile{fixed_height=true;

is_tab_stop=true;

}

而BASE.DCL中default_button引用button的定义如下:

default_button:button{is_default=true;

}

例中default_button不仅继承了button的fixed_height及is_tab_stop属性外,又加入了新的属性is_default。注释方式有两种:第一种注释方式为:/*注释内容*/

系统把注释起始符“/*”到结束符“*/”的全部内容看作注释;

第二种注释方式为://注释内容系统把从“//”开始到本行结束的全部内容看作注释。这种注释方式比第一种方便,仅仅用于单行注释。第三十三页,共五十七页,编辑于2023年,星期日2.对话框设计的基本原则(1)一般原则1)美观2)便于操作3)语言文字准确4)控件设计一致性5)便于操作控制6)实时反馈7)宽容性(errtile)8)提供帮助9)测试(2)通用规范1)布局2)对话框的尺寸和放置位置3)构件禁止4)嵌套对话框5)隐藏对话框6)缺省值7)键盘输入8)颜色9)标准化(3)预定义构件设计原则1)按钮2)编辑框3)列表框4)弹出表5)图象按钮和图象构件6)单选按钮及单选行或单选列7)滚动条8)组群框9)文本10)切换开关(也称checkbox)第三十四页,共五十七页,编辑于2023年,星期日3.对话框实例例:设计如图所示的对话框,用来输入绘制一个圆环所需要的参数:圆环内径、外径和圆心坐标。当用户按“OK”按钮后,退出对话框,调用AutoCAD内部命令DONUT绘出圆环。首先用对话框控制语言在对话框定义文件sample.dcl中描述对话框的组成和布局,其内容如下:

第三十五页,共五十七页,编辑于2023年,星期日练习:1.绘出在AutoCAD编辑状态中下述文件在屏幕上显示的对话框内容test1:dialog{ label="输入圆心坐标和直径"; :edit_box{ value="0.00"; key="x"; label="X:"; } :edit_box{ value="0.00"; key="y"; label="Y:"; } :edit_box{ value="0.00"; key="z"; label="Z:"; } :edit_box{ value="0.00"; key="d"; label="D:"; } ok_cancel; }第三十六页,共五十七页,编辑于2023年,星期日2.在AotuCAD编辑状态中,在屏幕上显示的对话框内容如下图,编写dcl文件。test2:dialog{label="热处理";:list_box{key="test_list_box";label="热处理方法";list="淬火\n调质\n回火\n正火\n退火";}ok_cancel;}第三十七页,共五十七页,编辑于2023年,星期日3.在AotuCAD编辑状态中,在屏幕上显示的对话框内容如下图,编写dcl文件。test:dialog{label="选择零件";:row{:list_box{label="选择零件";width=15;list="轴类零件\n盘盖类零件\n叉件类零件";}:boxed_radio_column{label="数量";:radio_button{label="10";}:radio_button{label="20";value="1";}:radio_button{label="30";}:edit_box{label="设计者";value="工程师";}}}spacer_1;ok_cancel;}第三十八页,共五十七页,编辑于2023年,星期日6.4对话框驱动程序设计

AutoCAD的对话框驱动程序可由AutoLISP及ADS二种方式完成,为了便于学习和理解驱动程序的主要构造过程和程序内容,下面介绍AutoLISP驱动程序以及对话框处理函数。

1.驱动程序的结构如图所示给出了对话框驱动程序的常规流程。第三十九页,共五十七页,编辑于2023年,星期日图示对话框的驱动程序通常应包含以下内容:(1)加载对话框DCL文件(load_dialogfilename)

使用对话框的第一件事就是通过load_dialog函数载入DCL文件(可省略扩展名.dcl),若加载成功则返回一个大于零的整数值,通常该值应由一内存变量保存以便将来被new_dialog和unload_dialog函数所调用。同时当检测到该值不大于零时,可以及时地显示出错信息并返回系统。(2)显示特定的对话框(new_dialogdialog_nameload_dcl_id)

该函数中dialog_name指DCL文件中所包含的某一对话框名称(不是label),不是DCL文件名(一个DCL文件可以同时定义多个对话框);load_dcl_id是(load_dialog)的返回值。当对话框显示成功时,该函数返回true,否则返回false。第四十页,共五十七页,编辑于2023年,星期日(3)设置必要的构件初始值

new_dialog成功后,系统自动根据DCL文件中的内容对构件进行初始化;此时用户也可根据自己的需要利用程序对构件作相应的初始化设置:如函数set_tile和mode_tile可改变构件的初始值及构件的初始状态;函数start_list,add_list,endlist可以变更列表框表项内容;函数start_image,vector_image,fill_image,slide_image和end_image均用于初始化图象构件的显示内容。同时用户可以通过函数action_tile对构件设置动作和回调函数,也可通过调用client_data_tile将应用程序中的特定数据与对话框中某些组成部分相联系。(4)激活对话框(start_dialog)

此函数将控制权交给对话框,并可开始交互操作。此时对话框中的构件均成为可选择构件(用mode_tile“禁止”的构件除外),并始终处于活动状态;直至执行done_dialog关闭对话框为止,对话框选中的构件会自动执行由action_tile设定的动作。第四十一页,共五十七页,编辑于2023年,星期日(5)处理用户操作激活对话框后,根据用户的交互动作,应同时执行相应的动作函数,此过程被称为回调(callback)。通常用户须使用get_tile,get_attr函数返回构件的value及相应的属性值,再通过set_tile,mode_tile进行相应的处理。(6)卸载对话框文件(unload_dialog)

对话框完成操作并且不再使用时,应从内存中释放对话框文件。这是对话框操作的最后一个步骤,注意:若DCL文件中有多个对话框(dialog)定义,其中有的对话框仍在使用时,不应卸载DCL文件。第四十二页,共五十七页,编辑于2023年,星期日2.对话框回调用户选中某一构件,就开始了回调过程,通常用action_tile完成相应的动作。为了在回调响应过程中及时获取用户的操作信息,常需通过以下六个变量来获取回调数据:

1)$key:被选中构件的关键字。

2)$value:被选中构件的当前值。

3)$data:初始化过程中所设置的相关数据。

4)$reason:指明用户操作细节,常用于处理编辑框、列表框、图象和滑块。对不同的构件其值也有不同的含义:

=1:用户选中了该构件。

=2:用户退出编辑框,但尚未作最后决定,此时聚焦已在其它的构件上,但编辑框的内容仍有可能再次被修改,因此,此时不能将编辑框中的内容存为永久性全局变量。

=3:用户已改变滑块值,但尚未作最后决定。此时也不宜将滑块的值保存为永久性全局变量。

=4:用户在该构件(列表框、图象按钮)上连击,连击的意义由用户设定。

5)$x:返回图象构件中的x坐标值。该值以图象内部坐标系为参照系,介于0~dimx_tile_1之间。

6)$y:返回图象构件中的y坐标值。该值以图象内部坐标系为参照系,介于0~dimy_tile_1之间。第四十三页,共五十七页,编辑于2023年,星期日

(1)接受键的回调对话框通常包含二组变量:随构件回调而变化的局部变量以及对应于对话框最终构件取值的全局变量。当用户选择接受键以后,应用程序需调用一个函数将局部变量永久性地赋给相应的全局变量。接受键的另一个重要调用函数是(done_dialog1)。注意此时的状态值一定为1。接受键的回调函数可按以下二种方式进行:

(action_tile"accept""(set_variables)(done_dialog1)")(action_tile"cancel""(done_dialog0)")

(action_tile"accept""(done_dialog1)")(action_tile"cancel""(done_dialog0)")(setqresult(start_dialog))(if(=1result)(set_varibles))

式中set_varibles是用户自定义的将局部变量赋给永久性全局变量的函数。第四十四页,共五十七页,编辑于2023年,星期日(2)对话框活动期间禁止使用的AutoLISP函数1)AutoCAD中还包含许多由AutoLISP基本函数组成的复杂函数。2)在对话框活动期间要使用上述禁用函数,应首先将对话框隐藏,完成操作后,再将对话框重新显示。函数名禁止原因command,osnap不能使用命令行Entdel,Entmak,Entmod,Entsel,Entnpd,Nentsel因对话框中的所有操作均可能被取消,不能使用可改变图形数据的函数Getangle,Getcorner,Getdist,Getint,Getkword,Getorient,Getpoint,Getreal,Getstring,Ssget,Graphscr,Grclear,Grdraw,Grread,Grtext,Grvecs,Menucmd,Prompt,Redraw,Textpage,Textscr这些函数须通过屏幕或命令行进行交互操作,均会影响到屏幕显示对话框活动期间被禁止的AutoLISP函数第四十五页,共五十七页,编辑于2023年,星期日3.对话框特殊处理

(1)嵌套对话框,图示为嵌套对话框常规流程图。※为了使屏幕保持清晰,嵌套层次应控制在三或四层之内。第四十六页,共五十七页,编辑于2023年,星期日(2)隐藏对话框对话框有效时,用户只能对对话框操作而不能对图形屏幕作交互操作,也不能进行命令行操作。(3)移动对话框系统可通过done_dialog返回对话框位置坐标(x,y),应用程序可将该点记录供下一次new_dialog指明显示位置。(4)设置颜色可通过调用acad_colordlg函数返回所选的颜色值供应用程序使用。(5)帮助对话框调用acad_helpdlg可调用acad帮助文件对话框,用户可生成自己的帮助文件。第四十七页,共五十七页,编辑于2023年,星期日4.对话框驱动函数下面按函数功能对PDB软件包中的函数进行分类介绍,包括函数的名称、变元、功能及示例。为了便于说明,字符变量前用“c”引导,整数变量前用“i”引导,变量类型为表的用“1”引导。(1)打开、关闭DCL文件1)(load_dialogcDclfile)此函数载入一个DCL文件,该DCL文件可同时包含多个对话框定义,cDclfile为载入的DCL文件名(可省略扩展名dcl),函数返回一整数值(iDcl_id)供new_dialog或unload_dialog函数使用。例如:

(setqiDcl_id(load_dialog"示例.dcl"))

若返回值大于0,则表示载入成功;若小于0,则表示载入失败。2)(unload_dialogiDcl_id)

该函数卸载一个与iDcl_id相关联的dcl文件,其iDcl_id为load_dialog的返回值,不论成功与否,该函数返回值均为nil。例如:

(unload_dialogiDcl_id)第四十八页,共五十七页,编辑于2023年,星期日(2)打开、关闭对话框1)(new_dialogcDialog_name,iDcl_id[cAction_expression][1Screen_pt])

此函数显示对话框,并初始化对话框构件,如缺省值或缺省操作。变元cDialog_name为字符串,指DCL文件中已定义的对话框名称,iDcl_id是load_dialog函数的返回值;cAction_expression是一个字符串,可包含一个AutoLISP表达式作为缺省操作。lScreen_pt是一个二维表,指定对话框在屏幕中显示的位置(x,y)。2)(start_dialog)

激活由new_dialog显示对话框,在调用该函数之前,应完成对话框的初始化,该函数没有变参,其返回值由done_dialog函数设定。3)(done_dialogiStatus)

该函数关闭对话框,变元iStatus指明关闭对话框的原因。该值将返回给start_dialog函数。第四十九页,共五十七页,编辑于2023年,星期日(3)初始化操作表达式或回调函数

(action_tilecKeycAction_expression)

此函数指定构件的相应动作。变元cKey为构件的关键字,cAction_expression为对构件初始动作表达式,同时,可对回调值进行相应的处理。例如:

(action_tile"accept""(set_varible)(done_dialog1)")(4)构件属性处理

1)(mode_tilecKeyiMode)

设置关键字为cKey构件的状态,iMode表示的状态码如下:

0——启动构件;1——禁止构件动作;

2——聚焦于该构件;3——选择编辑框的内容;

4——变换图象按钮或图象构件的显示状态。

2)(get_attrcKeycAttribute)

此函数返回DCL文件中关键字为cKey构件的相应属性设定值。cAttribute表示需返回的属性名称。

3)(get_tilecKey)

此函数用于获取由cKey指定的构件值,由于它能返回不是当前聚焦的构件值,较常见于回调函数的应用中。

4)(set_tilecKeycValue)

此函数用cValue的值转换由cKey所指定的构件值。第五十页,共五十七页,编辑于2023年,星期日(5)建立列表框和弹出表1)(start_listcKeyiOperation[iIndex])

此函数打开关键字为cKey的表并进行由iOperation所指定的表项操作。1——编辑表项;2——增加表项;3——创建新表,若cKey指定的构件已有旧表,则旧表被删除。iOperation缺省值为3,iIndex参数值指明编辑的表项缺省为0。2)(add_listcItem)

此函数根据start_list中的iOperation值不同而有不同功能:

iOperation=3:打开一个新表,并将cItem作为一个表项增加到新表中。

iOperation=1:用cItem内容替换由iIndex所指定的表项内容,若未能定iIndex值,则替换第一个表项的内容。

iOperation=2:在表的末端以cItem内容作为新增加的表项内容。3)(end_list)

结束当前表的处理。显然,表操作中的创建表、编辑表项及增加表项均可通过start_list中的iOperation参数值不同而进行。第五十一页,共五十七页,编辑于2023年,星期日(6)建立图象

1)(start_imagecKey)(end_image)start_image函数打开由cKey指定的图象构件以便对其进行编辑操作(如fill_image,slide_image,vactor_image)。完成图象构件的编辑操作后应调用end_image函数关闭图象的编辑功能。

2)(vector_imagex1y1x2y2color)

该函数在当前已激活的图象构件中,从始点(x1,y1)至终点(x2,x2)之间画一矢量,坐标值为相对坐标,构件左上角为(0,0),右下角由构件尺寸确定,(dimx_tile)及(dimy_tile)可提供构件的宽度和高度尺寸,(x2,y2)的值不能超出构件的宽度和高度值。

3)(fill_imagex1y1x2y2color)

在当前激活的图象中画一个填充的矩形,矩形的二个对角坐标分别为第一个角点坐标(x1,y1)与第二个角点坐标(x2,y2)。

4)(slide_imagex1y1x2y2sldname)

该函数在当前激活图象中显示一个幻灯片,(x1,y1)对应于幻灯片的输入点,(x2,y2)对应于该幻灯显示后的对角点坐标。第五十二页,共五十七页,编辑于2023年,星期日(7)专用数据处理(client_data_tilecKeycClientdata)

把应用程序管理数据与cKey所指定的构件相联系,当构件被选中时,自动将cClientdata数据保存在变量$data中。(8)相关的AutoLISP函数函数名说明(acad_colordlgcolornum,[flag])显示setcolor对话框(acad_helpdlghelpfile[topic])显示help对话框(acad_strsortlist)返回排序后的表(appendex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论