




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一篇 基本知识第1节 基本知识对话框是现今最流行的人机互动面接口;在早期的AutoCAD版本中巳经使用,但只有在R12版本开始,才提供给使用者自行编程的对话框开发功能。 对话框的描述定义在一纯文字文件(扩展名为DCL)内,无须特别的开发环境。定义文件中的对话框描述,均以对话控制语言(Dialog Control Language,简称DCL语言)所建立。在AutoLISP程序中,配合可编程对话框(Porgrammable Dialog Box,简称PDB)函数,激活及操控对话框。 可以在一个定义档(扩展名DCL)中定义多个对话框。 对话框由方块本身,及包含于其内的组件(或称为控件、构件)所组成。 每个组件的属性定义均包含在一对大括号 中。 在定义文件中,各组件及其属性均为小写,只有在赋值给属性,或设定对话框名称时才可使用大写字母。 属性以等号赋值,并以分号;结束(注意:在AutoLISP程序中,分号是作为批注)。 一般要在组件名称前加上一个冒号:,但若组件并不设定属性,则不需要在组件名称前加冒号,但却要以分号结束。 空行会被忽略。 若定义档发生严重的错误,会在当前的目录下,产生ACAD.DCE文件,以指明所发生的错误。第2节 定义档BASE.DCL 预设在SUPPORT的目录中,它包含了各组件的原型定义及各类型巳定义的其它基本组件。而所有自行开发的对话框定义文件,都可以使用在BASE.DCL定义文件中的各个组件。ACAD.DCL 预设在SUPPORT的目录中,它包含了AutoCAD中所有标准对话框的定义 参考定义档可在自行开发的对话框定义文件中,经由include指令,取得指定DCL文件中所定义的组件,其语法如下: include 对话框定义档 例如 include david.dcl 定义档名称要包含在双引号中,可以在档名前加上指定的目录路径。 先在当前的目录中搜寻该定义文件,然后是定义文件所在的目录,若指定档案的路径,则只会在指定的目录内寻找。 不可以参考ACAD.DCL所定义的对话框,即不可以使用include acad.dcl 预视对话框若在Visual LISP中开启一对话框定义文件,即可使用: 工具 - 接口工具 - 预览编辑器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节 练习请输入以下的对话框定义,并命名为RECT.DCL(纯文字格式),存于C盘的根目录中。RECT:dialog label=Rectangle ; :text /文字组件 label=Rectangle width : ; /组件的属性 ok_only; 定义说明:1 设定对话框的名称为RECT,紧接一个以冒号开始的组件dialog2 最左边为dialog组件的开大括号,接着是其属性label,并以等号设定其属性值为Rectangle,以分号结束此行叙述。3 text为字符串组件,其作用是在对话框中显示文字,组件名称前要加冒号。4 最左边为text组件的开大括号,接着是其属性label,并以等号设定其属性值为Rectangle width,最后以分号结束此行叙述。5 关大括号是对应第4行的开大括号,这对大括号同属于第3行的text组件。6 ok_only为一“按钮组件”,它的作用是在对话框中显示一个“确定(OK)”按钮。在一个对话框中,最少必需提供一个“确定”按钮,或一个“取消”按钮(组件名称为cancel_button),以作为结束对话框之用。本例中不设定按钮之属性,固不需以冒号放在组件名称的前面,但却需要以分号结束。7 关大括号是对应第2行的开大括号,这对大括号同属于第1行的dialog组件。注意:虽然定义档巳经完成,但仍要待学习完第2篇的课程后,才能开启及显示该对话框。第二篇 开启对话框第1节 AutoLISP函数加载DCL定义文件函数 (LOAD_DIALOG 对话框定义档名称) 例如 (LOAD_DIALOG C:/RECT.DCL) 自变量是要加载的对话框定义文件名称字符串(所以要在前后加双引号);若不设定扩展名则预设为.DCL 函数会依支持文件搜索路径找寻该定义档,不在搜索路径中的定义档,要在文件名称前加上指定的路径。 函数若成功加载该定义档,会返回一正整数值的档案处理码,供其它函数呼叫使用,无法加载时则返回负整数值。 一般会将返回的档案处理码以SETQ函数存入变量中。例如 (SETQ DCL_ID (LOAD_DIALOG C:/RECT.DCL) 开启并显示对话框 (NEW_DIALOG 对话框名称 档案处理码 预设动作 对话框位置) 例如 (NEW_DIALOG RECT DCL_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 档案处理码) 例如 (UNLOAD_DIALOG DCL_ID) 从内存释放档案处理码(经由LOAD_DIALOG函数取得)指定的对话框定义档。 函数返回值一定是NIL。第2节 对话框开启方式(DEFUN C:函数名称( ) (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函数左边的开括号,结束整个程序。练习编写一AutoLISP程序,以开启上一课所定义的对话框,并将该程序命名为RECT.LSP,存于C盘的根目录中,程序代码如下:(DEFUN C:RECT() (SETQ DCL_ID (LOAD_DIALOG C:/RECT.DCL) (NEW_DIALOG RECT DCL_ID) (START_DIALOG) (UNLOAD_DIALOG DCL_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)。 其它属性action allow_accept fixed_height height is_tab_stop mnemonic width 第4节 练习将上一课的RECT.DCL对话框定义档复制至RECT1.DCL,开启新的定义档并作如下的修改,使其可以输入四边形的宽度及高度。将AutoLISP程序文件RECT.LSP复制至RECT1.LSP,开启新的程序文件,并将要加载的对话框定义档改为RECT1(程序第1行);完成后即可加载及执行新的程序文件RECT:dialog label=Rectangle ; :edit_box /编辑框组件 label=Rectangle width : ; key=RECT_W ; edit_limit=16; edit_width=10; fixed_width=true; :edit_box /编辑框组件 label=Rectangle heigth : ; key=RECT_H ; edit_limit=16; edit_width=10; fixed_width=true; ok_only; 定义说明:1 设定对话框的名称为RECT,紧接一个以冒号开始的组件dialog。2 最左边为dialog组件的开大括号,接着是其属性label,并以等号设定其属性值为 Rectangle,以分号结束此行叙述。3 edit_box为编辑框组件,组件名称前要加冒号。4 最左边为edit_box组件的开大括号,接着是其属性label,并以等号设定其属性值为 Rectangle width : ,最后以分号结束此行叙述。5 设定属性key的属性值为RECT_W(即设定此编辑框的名称)。6 设定属性edit_limit的属性值为16(即最多可以在编辑框中输入16个字符)。7 设定属性edit_width的属性值为10(编辑框只会显示10个字附的长度)。8 设定属性fixed_width的属性值为true,表示表将编辑框以固定的宽度显示。9 关大括号是对应第4行的开大括号,这一对大括号同属于第3行的edit_box组件。10至16 与3至9行相似,设定另一个编辑框以输入高度的数据。只有属性label及key的属性值不同。17 以ok_only组件,在对话框中显示一个确定(OK)按钮,作为结束对话框之用。18 关大括号是对应第2行的开大括号,这一对大括号同属于第1行的dialog组件。注意:1 在第一个编辑框(输入四边形的宽度)的label属性值中,在字符串最后的冒号后面,加多了一个空格,目的是方更与下一个编辑框对齐。第三篇 设定及取得对话框组件内的值第1节 AutoLISP函数设定组件的值 (SET_TILE 组件关键词 设定值) 例如 (SET_TILE RECT_W 50.0) 组件的初始值可在定义文件中以属性value设定,但在程序文件中则以此函数设定。 组件关键词即是在对话框定义文件中,以组件属性key所定义的属性值,以赋予该组件一个操作名称。 组件关键词是区分大小写的。 此函数要在START_DIALOG函数之后才能使用。取得组件的值 (GET_TILE 组件关键词) 例如 (GET_TILE RECT_W) 作用是在AutoLISP程序文件中取得组件(以关键词指定)的设定值。 组件关键词的说明与SET_TILE函数相同。 此函数要在DONE_DIALOG函数之前使用(即要在对话框结束前使用)。设定组件的状态 (MODE_TILE 组件关键词 状态模式) 例如 (MODE_TILE RECT_W 0) 作用是在AutoLISP程序文件中设定组件(以关键词指定)的使用状态,其状态模式可以设定为下列任一整数值:0 使指定的组件成为使用状态。 1 使指定的组件成为禁用状态(组件以灰色显示)。 2 使指定的组件成为焦点。 3 选取指定编辑框组件的内容。 4 图像高亮度显示的开关。 组件关键词的说明与SET_TILE函数相同。第2节 练习 修改对话框定义档的方式,设定输入宽度的编辑框其初始值为50,输入高度的编辑框其初始值为25。定义档 将RECT1.DCL复制至RECT2.DCL,在关键词为RECT_W的组件中,加入value属性并设定其初始值为50;在关键词为RECT_H的组件中,加入value属性并设定其初始值为25。程序文件 将RECT1.LSP复制至RECT2.LSP,只须修改其加载的定义档名称为RECT2.DCL即可,完成后存盘,进入AutoCAD并载入RECT2.LSP程序文件,执行RECT2程序 RECT:dialog label=Rectangle ; :edit_box label=Rectangle width : ; key=RECT_W ; edit_limit=16; edit_width=10; fixed_width=true; value=50.0; /注意设定值为字符串型态,要在前后加双引号 :edit_box label=Rectangle height : ; key=RECT_H ; edit_limit=16; edit_width=10; fixed_width=true; value=25.0; /注意设定值为字符串型态,要在前后加双引号 ok_only; 第3节 练习 以修改AutoLISP程序文件的方式,使输入宽度的编辑框其初始值为50,输入高度的编辑框其初始值为25。定义档 将RECT1.DCL(不是RECT2.DCL)复制至RECT3.DCL,不作任何修改。程序文件 将RECT1.LSP复制至RECT3.LSP,程序代码如下: (DEFUN C:RECT() (SETQ DCL_ID (LOAD_DIALOG C:/RECT3.DCL) (NEW_DIALOG RECT DCL_ID) (SET_TILE RECT_W 50.0) (SET_TILE RECT_H 25.0) (START_DIALOG)(UNLOAD_DIALOG DCL_ID) ) 程序说明::1 以DEFUN函数定义程序的名称RECT,使用LOAD_DIALOG函数将对话框定义文件RECT3.DCL载入。使用SETQ函数,将LOAD_DIALOG返回的档案处理码存入变量DCL_ID中,以方便其它函数使用。2 使用NEW_DIALOG,开启及显示定义文件中(档案处理码)名称为RECT的对话框。3,4 使用SET_TILE函数,设定输入宽度的编辑框组件RECT_W(组件关键词,在定义文件中key设定的属性值)为50,设定输入高度的编辑框组件RECT_H为25。5 使用START_DIALOG函数,使对话框开始作用并接受使用者输入(在本例中只有确定钮可按)。使用UNLOAD_DIALOG函数以结束对话框。6 关括号是对应第1行DEFUN函数左边的开括号,结束整个程序。第4节 AutoLISP函数组件指定动作 (ACTION_TILE 组件关键词 指定动作) 例如 (ACTION_TILE RECT_W (SETQ TEMP 1) 当焦点在指定的组件(关键词)上并按下接受键时,即会执行函数所指定的动作。 指定动作会取代定义文件中,该组件的action属性之预设动作。 组件关键词 accept 在预设情况下是与确定按钮组件关连(即是确定按钮的预设关键词),cancel 则与取消按钮组件关连(即是取消按钮的预设关键词)。终止对话框 (DONE_DIALOG 指定返回值) 例如 (DONE_DIALOG) 此函数的返回值为一个2D点串行坐标,为结束对话框时,对话框的所在位置可作为下次启动同一个对话框的位置自变量,使对话框在之前结束时的位置再次显现。练习 将定义档RECT3.DCL复制至RECT4.DCL,但不作任何修改。将程序文件RECT3.LSP复制至RECT4.LSP,并修改为:使用ACTION_TILE函数,指定在按下确定钮时,执行一辅助程序。在该辅助程序中,使用GET_TILE函数最得对话框中四边形的宽度及高度,并在使用者选取的位置上绘画出四边形。(DEFUN C:RECT() (SETQ DCL_ID (LOAD_DIALOG C:/RECT4.DCL) (NEW_DIALOG RECT DCL_ID) (SET_TILE RECT_W 50.0) (SET_TILE RECT_H 25.0) (ACTION_TILE accept (S_RECT)(DONE_DIALOG) (START_DIALOG)(UNLOAD_DIALOG DCL_ID) (SETQ PT_0 (GETPOINT nSelect rectangle lower left point : ) (SETQ PT_1 (POLAR PT_0 0 TMP_W) PT_2 (POLAR PT_1 (/ PI 2) TMP_H) PT_3 (POLAR PT_2 PI TMP_W) (COMMAND PLINE PT_0 PT_1 PT_2 PT_3 C) (PRINC) (DEFUN S_RECT() (SETQ TMP_W (ABS (ATOF (GET_TILE RECT_W) TMP_H (ABS (ATOF (GET_TILE RECT_H) ) 主程序(RECT)说明:1 注意将LOAD_DIALOG函数所加载的对话框定义档改为RECT4.DCL。2- 4 参阅RECT3程序的说明。5 使用ACTION_TILE函数设定关键词为accept的组件(预设为确定按钮)的指定动作。先执行辅助程序S_RECT,取得输入的数据,再使用DONE_DIALOG函数结束对话框。6 参阅RECT3程序,第5行的说明。7 使用GETPOINT函数让使用者选取四边形的左下角位置坐标,存入变量PT_0。8 使用POLAR函数取得新坐标点:从选取点PT_0开始,向右(角度为0),距离为四边形的宽度(变量TMP_W,在辅助程序中取得),存入变量PT_1。9 使用POLAR函数取得新坐标点:从上一点PT_1开始,向上(角度90,等于PI除2),距离为四边形的高度(变量TMP_H,在辅助程序中取得),存入变量PT_2。10 使用POLAR函数取得新坐标点:从上一点PT_2开始,向左(角度180,等于PI),距离为四边形的宽度(变量TMP_W,在辅助程序中取得),存入变量PT_3。注意最右边的关括号,是对应第8行SETQ函数左边的开括号。11 使用COMMAND函数执行PLINE指令,并分别设定四个坐标变量,最后以C选项封闭多段线。12 以一个不带参数的PRINC函数,抑制多余的显示及返回值。最右边的关括号是对应第1行DEFUN函数左边的开括号。辅助程序(S_RECT)说明:1 设定函数名称;使用GET_TILE函数取得指定关键词(RECT_W,代表输入宽度的编辑框组件)的值,并将该值使用ATOF函数由字符串型转为实数型(有小数),再使用ABS函数取得实数的绝对值,以防止使用者输入负数,最后将数据存入变量TMP_W。2 使用GET_TILE函数取得指定关键词(RECT_H,代表输入高度的编辑框组件)的值,转型及取得绝对值后,存入变量TMP_H。3 最后的一个关括号,对应第1行DEFUN函数左边的开括号。第四篇 按钮及核取框(切换钮)第1节 按钮组件(button)一个矩形的按钮,可在按钮上显示指定的讯息。:button /组件名称 属性=属性值 ; 属性 label 显示在按钮中的提示文字。key 其属性值即为使用该按钮组件的关键词。width 指定按钮的显示宽度。height 指定按钮的显示高度。fixed_width 通常与width属性一并使用,以固定按钮的显示宽度。fixed_height 通常与height属性一并使用,以固定按钮的显示高度。is_enable 可设定按钮是否可以使用,其属性值可设定为true(可使用)或false(禁用,按钮中的消息正文变为灰色显示),默认值为true。is_default 属性值可设定为true或false。当使用者按下接受键(大部份的情况,ENTER被用作接受键)时,本属性设定为true的组件会自动被选取,当使用者在allow_accept属性设为true的编辑框,列表框或图像按钮中按下接受键或双击鼠标键(只对列表框及图像按钮有效)时,本属性设定为true的组件亦会自动被选取。alignment 如果组件成水平方向排列,属性值可设定为left,right或centered(若不设定则预设为left)。如果组件成垂直方向排列,属性值可设定为top,bottom或centered(若不设定则预设为centered)。其它属性action is_cancel is_tab_top mnemonic 第2节 核取框(切换钮)组件(toggle)是一个启用或关闭的切换方框,当方框中没有剔勾符号时,表示该功能为关闭状态,其组件的值为0,当方框中有剔勾符号时,表示该功能为启用状态,其组件的值为1。:toggle /组件名称 属性=属性值 ; 属性 label 显示在切换钮后面(右边)的提示文字。key 其属性值即为使用该按钮组件的关键词。is_enable 可设定切换钮是否可以使用,其属性值可设定为true(可使用)或false(禁用),默认值为true。value 方框中没有剔勾符号时,表示该功能为关闭状态,其组件的值为0(亦是默认值),相反则为启用状态,组件的值为1。alignment 如果组件成水平方向排列,属性值可设定为left,right或centered(若不设定则预设为left)。如果组件成垂直方向排列,属性值可设定为top,bottom或centered(若不设定则预设为centered)。其它属性action is_tab_stop width heigth fixed_width fixed_heigth 第3节 练习 在四边形的对话框中,增加一核取框,以确定是否在四边形中加上交叉的对角线。另在对话框的底部增加两个按钮,按下时可使核取框作用或禁用。定义档 将RECT4.DCL复制至RECT5.DCL,在新的定义档中增加核取框及按钮定义。RECT:dialog label=Rectangle ; :edit_box label=Rectangle width : ; key=RECT_W ; edit_limit=16; edit_width=10; fixed_width=true; value=50.0; :edit_box label=Rectangle height : ; key=RECT_H ; edit_limit=16; edit_width=10; fixed_width=true; value=25.0; :toggle /新增的核取框(切换钮)组件 label=X line in rectangle ; key=RECT_X ; :button /新增的按钮组件 label=&Enable ; key=RECT_E ; width=10; fixed_width=true; :button /新增的按钮组件 label=&Disable ; key=RECT_D ; width=10; fixed_width=true; ok_only; 定义说明:第1至第18行的定义,与上一课练习RECT4.DCL定义相同,不再叙述。19 以冒号开始,定义一个切换钮组件。20 切换钮的开大括号,以label属性定义切换钮右边的消息正文。21 以key属性设定切换钮的操作关键词。22 关大括号是对应第20行的开大括号,此对大括号同属于第19行的切换钮组件。23 以冒号开始,定义一个按钮组件。24 按钮的开大括号,以label属性定义按钮上显示的消息正文。注意:字符串的&符号,表示设定在该符号右边的一个字母为快捷键。在显示时,&符号不会出现,但&符号右边的一个字符会以加底线显示。25 以key属性设定按钮的操作关键词。26 以width属性设定按钮的宽度,否则按钮会自动加长并占用整列的长度。27 fixed_width属性设定为true,使按钮以固定的宽度显示。28 关大括号是对应第24行的开大括号,此对大括号同属于第23行的按钮组件。29至34 与上个按钮的定义类似(23至28行),但其label及key的属性值不同。35 定义一个确定按钮,以结束对话框。36 关大括号是对应第2行的开大括号,此对大括号同属于第1行的dialog组件。程序文件 将RECT4.LSP复制至RECT5.LSP,其程序代码如下:(DEFUN C:RECT() (SETQ DCL_ID (LOAD_DIALOG C:/RECT5.DCL) (NEW_DIALOG RECT DCL_ID) (SET_TILE RECT_W 50.0) (SET_TILE RECT_H 25.0) (ACTION_TILE accept (S_RECT)(DONE_DIALOG) (ACTION_TILE RECT_E (MODE_TILE RECT_X 0) ;设定使用按钮的动作 (ACTION_TILE RECT_D (MODE_TILE RECT_X 1) ;设定禁用按钮的动作 (START_DIALOG)(UNLOAD_DIALOG DCL_ID) (SETQ PT_0 (GETPOINT nSelect rectangle lower left point : ) (SETQ PT_1 (POLAR PT_0 0 TMP_W) PT_2 (POLAR PT_1 (/ PI 2) TMP_H) PT_3 (POLAR PT_2 PI TMP_W) (COMMAND PLINE PT_0 PT_1 PT_2 PT_3 C) (IF (= TMP_X 1) (COMMANDLINE PT_0 PT_2 LINE PT_1 PT_3 ) (PRINC) (DEFUN S_RECT() (SETQ TMP_W (ABS (ATOF (GET_TILE RECT_W) TMP_H (ABS (ATOF (GET_TILE RECT_H) TMP_X (ATOI (GET_TILE RECT_X) ;取得切换钮的状态 ) 主程序(RECT)说明:1至5 与程序RECT4.LSP相同,主要是加载及显示对话框,并设定其中的组件。6 使用ACTION_TILE函数,设定当按下ENABLE按钮(关键词为RECT_E)时,所执行的动作。使用MODE_TILE函数,设定切换钮(关键词为RECT_X)的状态为0,使其处于作用状态。注意指定的动作为字符串型,前后要加上双引号;而包含在字符串中的双引号,则必须以反斜线加双引号表示。7 与第6行相似,设定按下DISABLE按钮(关键词为RECT_D)时,将切换钮的状态设为1,使其处于禁用状态。8至13 与程序RECT4.LSP相同,主要是用作画出四边形。14 使用IF函数检查变量TMP_X(在辅助程序中取得,表示切换钮的状态)是否为1,若是则以COMMAND函数,执行两个LINE指令,画出四边形的对角线。15 以一个不带参数的PRINC函数,抑制多余的显示及返回值。最右边的关括号是对应第1行DEFUN函数左边的开括号。辅助程序(S_RECT)说明:1,2 大致与RECT4.LSP的辅助程序相同,都是取得编辑框内的数据并存入变量中。3 使用GET_TILE函数取得切换钮(关键词为RECT_X)的状态(返回值是字符串,0是使用,1是禁用),再用ATOI函数将返回的字符串变为整数,存入变量TMP_X,供主程序第14行的IF函数,判断是否需要加上对角线。注意,返回值转型后,结果只会是1或0,因此不须使用ABS函数取其绝对值。4 关括号与1行DEFUN函数左边的开括号对应。第五篇 横列、直行、空白及文字组件第1节 横列(row)及直行(column)组件 其实这两个都不算是实体的组件,只是用作指定后续的其它组件的排列格式。 指定为横列时,则包含在此组件一对大括号中的所有组件,均作水平左至右排列,直行时则呈垂直上至下排列。 若不指定组件的排列格式时,则预设为直行格式。 若指定其label属性,则会在外围加一矩形线框(包含在大括号中间的其它组件则显示在线框中),其属性值则为该线框左上角的标题文字,若不设定则没有线框及标题。row :column 其它组件或属性 其它组件或属性 属性alignment fixed_height fixed_width height width label 框列(boxed_row)及框行(boxed_column)组件不论是否设定其label属性,均有矩形的线框包含中间的各个组件。若不设定此属性,则没有标题显示在线框的左上角。:boxed_row :boxed_column 其它组件或属性 其它组件或属性 属性 与横列及直行相同 第2节 空白(spacer)组件 可在对话框中加入空白组件,使其它组件移位,增加空间,美化对话框等作用。空白组件有下列3种: 若不设定属性时,则不需在组件名称前加冒号,亦不需一对大括号,但需要在组件的名称后面加上分号。 组件spacer在不设定其属性时,在垂直方向(直行)为半个字符高度,组件spacer_1则为一个字符高度。 组件spacer_0在不设定其属性时,其高度为0,但夹在其它横向排列的组件中时,会自动扩大并与相邻的组件同高同宽。:spacer :spacer_0 :spacer_1 属性=属性值; 属性=属性值; 属性=属性值; 属性alignment fixed_heigh fixed_width height width 练习在RECT对话框内,使两个按钮(Enable及Disable)水平排列在同一横列上,并增加空间使两按钮置中如下图:定义档 将RECT5.DCL复制至RECT6.DCL,修改的定义如下:程序文件 将RECT5.LSP复制至RECT6.LSP,程序中只须修改加载的定义档名称。RECT:dialog label=Rectangle ; :edit_box label=Rectangle width : ; key=RECT_W ; edit_limit=16; edit_width=10; fixed_width=true; value=50.0; :edit_box label=Rectangle height : ; key=RECT_H ; edit_limit=16; edit_width=10; fixed_width=true; value=25.0; :toggle label=X line in rectangle ; key=RECT_X ; :row /新增的横列组件 spacer_0; /开大括号及空间组件 :button label=&Enable ; key=RECT_E ; width=10; fixed_width=true; spacer_0; /开大括号及空间组件 :button label=&Disable ; key=RECT_D ; width=10; fixed_width=true; spacer_0; /开大括号及空间组件 /横列的关括号 ok_only; 定义说明:1至2 定义对话框名称;定义dialog组件及其属性。3至10 定义输入宽度的编辑框(关键词RECT_W)及其属性。11至18 定义输入高度的编辑框(关键词RECT_H)及其属性。19至22 定义切换钮(关键词RECT_X)及其属性。23 定义一个不设属性的横列row组件。24 横列组件的开大括号,以包含其它的组件。设定空间组件spacer_0,使第一个按钮左边的空间自动扩宽。25至30 设定按钮(关键词RECT_E)组件及其属性。31 设定空间组件spacer_0,使两个按钮中间的空间自动扩宽。32至37 设定按钮(关键词RECT_D)组件及其属性。38 设定空间组件spacer_0,使第二个按钮右边的空间自动扩宽。39 关大括号是对应第24行的开大括号,该对大括号同属于第23行的横列组件。使包含在中间的两个按钮组件会水平排列显示。40 显示一个确定按钮。41 关大括号是对应第2行的开大括号,该对大括号同属于第1行的dialog组件。第3节 字符串组件(text)在对话框中显示一列文字。在label属性值的字符串中,可以使用以下之特殊符号: 显示双引号: t 使文字跳至下一个定位点。 n 使文字符串换行。 注意这个不是批注符号,它可以在字符串中加上反斜线。:text 属性=属性值 ; 属性is_bold 若设定其属性值为true则文字以粗体显示;若为false则正常显示 其它属性 alignment fixed_width fixed_height width height key label value 符串组件(text_part)其组件的字符串形式不同于字符串组件text,在组件中的宇串,其边距(margin)为0。当要将多个组件并合成新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省安阳市滑县2024-2025学年六年级上学期期末考试数学试卷(含答案)
- 2025版企业员工培训与职业素养提升合同
- 2025短视频项目跨境合作与全球推广合同范本
- 2025年度社保补偿协议范本编写指南及案例分析
- 2025版十堰经济技术开发区春光里人才公寓租赁管理服务合同
- 2025年度出国物流行业劳务用工合同协议书
- 2025年度大型会展中心电脑维护与现场展示系统服务合同
- 2025版进口葡萄酒国际贸易代理购销合同范本
- 2025版片石环保建材采购合同协议
- 2025年度国际邮轮包船货物运输合同
- GB/T 44994-2024声学助听器验配管理
- 《压力容器安全培训》课件
- 急危重症患者抢救及会诊制度
- 电池及电池系统维修保养师国家职业标准(2024年)
- 学校各岗位廉政风险点及防控措施
- 人教部编八年级语文上册《浣溪沙(一曲新词酒一杯)》示范课教学课件
- 临床成人失禁相关性皮炎的预防与护理团体标准解读
- 11声音的三要素(练习)(原卷版)
- 矿产购销合同模板
- 湖北荆州2023年中考语文现代文阅读真题及答案
- 重庆市字水中学2024届九年级上学期期中考试数学试卷(含答案)
评论
0/150
提交评论