您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > AutoLisp和对话框DCL
第1节基本知识对话框是现今最流行的人机互动面接口;在早期的AutoCAD版本中巳经使用,但只有在R12版本开始,才提供给用户自行编程的对话框开发功能.对话框的描述定义在一纯文本档(扩展名为DCL)内,无须特别的开发环境定义文件中的对话框描述,均以对话控制语言(DialogControlLanguage,简称DCL语言)所建立在AutoLISP程序中,配合可编程对话框(PorgrammableDialogBox,简称PDB)函数,激活及操控对话框可以在一个定义档(扩展名DCL)中定义多个对话框对话框由方块本身,及包含于其内的组件(或称为控件,构件)所组成每个组件的属性定义均包含在一对大括号{}中在定义文件中,各组件及其属性均为小写;只有在赋值给属性,或设定对话框名称时才可使用大写字母属性以等号=赋值,并以分号;结束(注意:在AutoLISP程序中,分号是作为批注)一般要在组件名称前加上一个冒号:,但若组件并不设定属性,则不需要在组件名称前加冒号,但却要以分号结束空行会被忽若定义档发生严重的错误,会在当前的目录下,产生ACAD.DCE文件,以指明所发生的错误.第2节定义档BASE.DCL默认在SUPPORT的目录中,它包含了各组件的原型定义,及各类型巳定义的其它基本组件;而所有自行开发的对话框定义文件,都可以使用在BASE.DCL定义文件中的各个组件ACAD.DCL默认在SUPPORT的目录中,它包含了AutoCAD中所有标准对话框的定义参考定义档可在自行开发的对话框定义文件中,经由include指令,取得指定DCL文件中所定义的组件;其语法如下:@include对话框定义档e.g.@includedavid.dcl定义档名称要包含在双引号中,可以在档名前加上定的目录路径会先在当前的目录中搜寻该定义文件,然后是定义文件所在的目录;若有指定档案的路径,则只会在指定的目录内寻找不可以参考ACAD.DCL所定义的对话框,即不可以使用@includeacad.dcl预视对话框若在VisualLISP中开启一对话框定义文件,即可使用:工具--接口工具--预览编辑器DCL在下拉式列示框中,选取该定义文件中所设定的对话框名称,即可预视对话框亦可直接输入该对话框的名称(要注意大小写)第3节批注//表示其右边(至该行末端)的文字视为注释/**/包括在两个批注符号中间的所有文字(可跨越多行)均视为注释语义检核提供4个等级的检核,该些检核会在对话框载入时完成;可以将下列语句放在定义文件中的任何位置,但不能在任何对话框的定义内.dcl_settings:default_dcl_settings{audit_level=3;}等级0不检查:只有在该定义档巳被检核且不会再作修改时使用等级1错误:找出可能造成AutoCAD终止的错误,此等级也是默认值等级2警告:找出配置或行为模式的错误,所有定义在修改后,最少应执行此等级的检查一次等级3提示:找出多余的属性定义对话框的设计美观性颜色配比,组件整齐排列等方便性相同功能的项目要编排在一起,或使用线框包围使用频繁的项目应设置在最显眼及方便的位置适当设置快捷键及默认值(默认值,省缺值)除非对话框中的项目过多,否则应避免使用巢状(嵌套)式对话方框互锁或互换项目选取(或不选取)时,会否引致其它项目功能的改变(enable或disable...等)第4节对话框定义文件内容模式对话框名称:dialog{label=对话框标题;:组件名称{属性名称=属性值;}//组件定义结束}//对话框结束定义说明1对话框名称就是由AutoLISP程序,启动对话框时所呼叫的名称;可以自行设定,要区分大小写字母dialog为对话框中,最外层的组件(即整个对话框),其它的组件均包含在其中一般组件要以冒号:开始,并为小写字母;因为不是属性,所以不须使用分号;结束2开大括号{紧随组件名称之后,以包含该组件的属性或其它组件label为属性名称,并以等号=赋以其右边的属性值,最后以分号;结束该行叙述3包含在对话框中的其它组件组件要以冒号:开始,并为小写字母;因为不是属性,所以不须使用分号;结束4开大括号{紧随组件名称之后,以包含组件的属性或其它组件包含在组件中的属性,要以等号=赋以其右边的属性值;最后以分号;结束该行叙述5以关大括号}与第4行的开大括号}对应,以结束该组件(第3行)之定义双除号//右边的文字即为批注6以关大括号}与第2行的开大括号}对应,以结束该组件之定义(在本例中为整个对话框的定义,即第1行的dialog组件注意:上例中缩排只为方便观察及维护,不作缩排亦可包含在对话框中的组件及组件中的属性可以不只一个第5节练习(Exercises)请输入以下的对话框定义,并命名为RECT.DCL(纯文本格式),存在C盘的根目录中RECT:dialog{label=Rectangle;:text//文字组件{label=Rectanglewidth:;//组件的属性}ok_only;}定义说明:1设定对话框的名称为RECT,紧接一个以冒号开始的组件dialog2最左边为dialog组件的开大括号,右边是其属性label,并以等号设定其属性值为Rectangle,以分号结束此行叙述3text为字符串组件,其作用是在对话框中显示文字,组件名称前要加冒号4最左边为text组件的开大括号,右边是其属性label,并以等号设定其属性值为Rectanglewidth,最后以分号结束此行叙述5关大括号是对应第4行的开大括号,这对大括号同属于第3行的text组件6ok_only为一按钮组件,它的作用是在对话框中显示一个确定(OK)按钮;在一个对话框中,必需提供最少一个确定按钮,或一个取消按钮(组件名称为cancel_button),以作为结束对话框之用;本例中不设定按钮之属性,固不需以冒号放在组件名称的前面,但却需要以分号结束7关大括号是对应第2行的开大括号,这对大括号同属于第1行的dialog组件注意:虽然定义档巳经完作,但仍要待学习完第2篇的课程后,才能开启及显示该对话框第1节AutoLISP函数加载DCL定义文件函数(LOAD_DIALOG对话框定义档名称)e.g.(LOAD_DIALOGC:/RECT.DCL)自变量是要加载的对话框定义文件名称字符串(所以要在前后加双引号);若不设定扩展名则预设为.DCL函数会依资源搜寻路径找寻该定义文件;不在搜寻路径中的档案,要在文件名前加上指定的路径函数若成功加载该定义档,会传回一正整数值的档案处理码,供其它函数呼叫使用;无法加载时则传回负整数值一般会将传回的档案处理码以SETQ函数存入变量中e.g.(SETQDCL_ID(LOAD_DIALOGC:/RECT.DCL))开启并显示对话框(NEW_DIALOG对话框名称档案处理码[预设动作[对话框位置]])e.g.(NEW_DIALOGRECTDCL_ID)对话框名称为字符串,要在前后加双引号;要注意一个定义档中,可包含多个对话框名称及其定义档案处理码是经由LOAD_DIALOG函数取得默认动作为字符串表示式;函数可以不加默认动作,或以空字符串表示如果要设定对话框显示时的位置,则必须同时设定预设动作对话框位置为2D的点串行,指定对话框左上角的X,Y坐标如果以'(-1-1)为对话框位置,则会在绘图屏幕的中心点开启对话框如果成功开启对话框,函数会传回T,否则传回NIL开始接受使用者输入(START_DIALOG)函数不须提供任何自变量使前一个用NEW_DIALOG函数开启的对话框开始作用,直至操作表示式或回复函数呼叫DONE_DIALOG函数为止一般DONE_DIALOG与关键词accept(一般是按下确定按钮)或关键词cancel(一般是按下取消按钮)相关若传回值为1,表示使用者按下确定钮结束对话框;0表示按下取消钮;-1表示全部对话框都以TERM_DIALOG函数终止;大于1的整数,其意义由应用程序决定释放(卸除)对话框(UNLOAD_DIALOG档案处理码)e.g.(UNLOAD_DIALOGDCL_ID)从内存释放档案处理码(经由LOAD_DIALOG函数取得)指定的对话框定义档函数传回值一定是NIL第2节对话框开启方式(DEFUNC:函数名称()(SETQ变量(LOAD_DIALOG对话框定义档))(NEW_DIALOG对话框名称变量)(START_DIALOG)(UNLOAD_DIALOG变数))程序说明:1以DEFUN函数定义程序的名称,使用LOAD_DIALOG函数加载指定的对话框定义档使用SETQ函数,将LOAD_DIALOG传回的档案处理码存入变量中,以方便其它函数使用2使用NEW_DIALOG,开启及显示定义文件中(档案处理码),指定的对话框3使用START_DIALOG函数,使对话框开始作用并接受使用者输入使用UNLOAD_DIALOG函数以结束对话框4关括号是对应第1行DEFUN函数左边的开括号,结束整个程序练习(Exercises)编写一AutoLISP程序,以开启上一课所定义的对话框;并将该程序命名为RECT.LSP,存在C盘的根目录中,程序代码如下:(DEFUNC:RECT()(SETQDCL_ID(LOAD_DIALOGC:/RECT.DCL))(NEW_DIALOGRECTDCL_ID)(START_DIALOG)(UNLOAD_DIALOGDCL_ID))程序说明:1以DEFUN函数定义程序的名称为RECT,使用LOAD_DIALOG函数将对话框定义文件RECT.DCL载入;使用SETQ函数,将LOAD_DIALOG传回的档案处理码存入变量DCL_ID中,以方便其它函数使用2使用NEW_DIALOG,开启及显示定义文件中(档案处理码)名称为RECT的对话框3使用START_DIALOG函数,使对话框开始作用并接受使用者输入(在本例中只有确定钮可按);使用UNLOAD_DIALOG函数以结束对话框4关括号是对应第1行DEFUN函数左边的开括号,结束整个程序第3节编辑框组件(edit_box)可供用户直接输入字符串的矩形方框;注意在编辑框中所显示及输入的数据均为字符串型态,而数字则要在取得编辑框的字符串内容后(在下一篇中介绍),使用AutoLISP函数将其转为数值型态的数据:edit_box//组件名称{属性=属性值;}属性label显示在编辑框前面(左边)的提示文字key其属性值即为使用该组件的关键词,使在AutoLISP程序中操控此组件;在同一个对话框定义中,不能有相同名称的关键词定义edit_limit指定在编辑框中,可输入字符串的最大字符长度edit_width指定编辑框显示时的阔度(通常与fixed_width属性一拼使用)value指定编辑框显示时,当中的默认值(注意显示数值数据时,要先用AutoLISP函数将数据(或变量)转为字符串型态)fixed_width通常与width属性一拼使用,以固定编辑框显示时的阔度(其属性值可设定为true或false)is_enable可设定编辑框是否可以使用(其属性值可设定为true或false,默认值为true)alignment如果组件成水平方向排列,属性值可设定为left,right或centered如果组件成垂直方向排列,属性值可设定为top,bottom或centered(水平方向的默认值为left,垂直方向则为centered)其它属性actionallow_acceptfixed_heightheightis_tab_stopmnemonicwidth第4节练习(Exercises)将上一课的RECT.DCL对话框定义档复制至RECT1.DCL,开启新的定义档并作如下的修改,使其可以输入四边形的阔度及高度;将AutoLISP程序文件RECT.LSP复制至RECT1.LSP,开启新的程序文件,并将要加载的对话框定义档改为RECT1(程序第1行);完成后即可加载及执行新的程序文件RECT:dialog{label=Rectangle;:edit_box//编辑框组件{la
本文标题:AutoLisp和对话框DCL
链接地址:https://www.777doc.com/doc-5772749 .html