对话框及其应用¨对话框是人机交互的主要界面之一,它 具有操作直观、方便、易于输入和修改 数据等特点,是现代软件设计必不可少 的一种风格形式在对AutoCAD进行软 件二次开发时,常使用对话框设置工作 环境、修改系统参数和输入初始数据 AutoCAD为用户提供的可编程对话框技 术是由专用的对话框描述语言DCL( Dialog Control Language)和AutoLISP驱动 函数两部分内容组成5.1 对话框的组成¨对话框是由框架和包含在框架内的各种 控件所组成AutoCAD的PDB(Pragram Dialog Box)提供的预定义控件有按钮( 单选框、复选框、图像、动作)、弹出 式列表框、文本编辑框和滑动条等用 户可以通过把这些控件进行分组,按行 或按列进行组合,并用在其外面加上框 线或不加框线的方法组成更为复杂的控 件组控件和控件组在对话框中的布局 、外观与功能由控件的属性来定义基本组件: ¨复选框:(Toggle/CheckBox)¨单选按钮(Radio_Button)¨ 选择按钮(Button)¨编辑框(Edit_Box)¨列表框(List_Box)¨下拉式列表框(Popup_List)¨ 滑块(Slider)¨图像(Image)¨说明文字(Text)对话框程序的运行过程¨第一步:在AutoLisp程序中启动DCL对话 框界面;¨第二步:用户在对话框里输入数据,完 成交互操作;¨第三步:将用户输入的数据返回Auto Lisp程序中执行。
认识对话框及其控件(1)认识对话框及其控件(2)认识对话框及其控件(3)5.2 基本控件及其定义1、按钮(button)功能:主要用于启动和执行命令等动作 ,如“确定”、“取消”、“帮助”等1)预定义的标准按钮(button)及其引用1)、单一确定按钮 引用方式:ok_only;3)、确定-取消-帮助按钮 引用方式:ok_cancel_help;2)、确定-取消按钮 引用方式:ok_cancel;自定义按钮(button):retirement_button{label = “设计计算“;key = “accept“;is_default = true;}¨:row{ fixed_width = true; ¨ alignment = centered; ¨ :retirement_button{ label = “设计计算“; ¨ key = “accept“; ¨ is_default = true;} ¨ spacer_5; ¨ :retirement_button{ label = “直接绘图“; ¨ key = “drawing“;} ¨ spacer_5; ¨ ………. ¨ }2、单选按钮(radio_button) 功能:用于相互排斥的有限选择集合中的一 个选择,通常由多个单选按钮组成一组, 在某一时刻,只有其中一个被选择。
1)、单选行按钮组Boxed_radio_rowRadio_row2)、单选列按钮组Boxed_radio_columnRadio_column3、复选框按钮(toggle_button)相当于一个开关,只有打开和关 闭两个状态4、图像按钮 (image_button)当选定一个图 像按钮时,程 序获得实际选 取点的坐标, 据此来确定用 户选取的内容 5、列表框(list_box)一个列表框就是一个由若干字符串组 成的列表其目的是要显示一个列表供 用户从中选择一项6、弹出式列表(popup_list)弹出式列表在功能上与列表框相同,但它 占据的空间较小表框右边有一个向下箭头 ,单击箭头时,将弹出一个列表7、文本编辑框(edit_box)文本编辑框是一个输入和编辑文本的 子窗口,通常用于输入文本名、点的坐 标、长度距离以及其它参数8、滑动条(slider)用户可以将滑动条的指示器左右拖动 ,以得到一个数值这个数值以字符串 的形式返回9、图像(image)该控件为对话框的一个矩形区域,在 该区域可显示一幅矢量图形或幻灯片 其功能就是为了增强直观性10、文本(text)该控件显示文本字符串,通常用于显 示一个标题或一些提示信息。
11、间隙(spacer)该控件是空控件,无任何显示主要用于 调整对话框相邻控件间的间距和布局由于 AutoCAD能自动调整控件之间的间距,所以 该控件使用较少12、其它控件组行(row) 列(column) 加框行(boxed_row)、加框列(boxed_column) 单选行(radio_row)、 单选列(radio_column) 加框单选行(boxed_radio_row) 加框单选列(boxed_radio_column)¨控件的属性用于定义控件的功能与布局 控件的属性类型有四种:整型数、实 型数、字符串和保留字¨保留字是由字母开头的字母数字序列, 且有大小写之分,如属性Width就不能等 同于width;属性值True就不是true¨应用程序总是把属性当作字符串来检索 ,若用户的应用程序需要使用数字值, 就必须根据需要把字符转换成数字5.3 控件的属性¨1、标签属性(label, 如:label=“半径”;)¨ 用于对话框或控件的一个标题,它的 取值类型为一个字符串对不同的控件 ,它在对话框中的位置不同例如:按 钮的标签属性值出现在按钮内,加框列 控件的标签属性出现在框的上方等。
¨ 如果标签字符串中的一字符前面出现 “)¨ key的值为一区分大小写的字符串,每一个控 件都必须有唯一的关键字属性,以便应用程序 对其进行操作¨2)值属性(value, 如:value=25;)¨Value属性用于指定控件的初始值,该值在程 序运行中可以通过用户输入或在应用程序中调 用set_tile函数来修改不同类型控件的属性值 含义也可能不同,但对对话框布局没有影响2、关键字属性和值属性¨1) 宽度属性(Width)和高度属性(Height)¨ 这两个属性用于指定控件的宽度和高度 除图像控件和图像按钮必须指出这些 尺寸外,其它控件一般不需要指定这些 值,而使用默认值在布局时动态分配 由这两个属性指定的值确定控件的最小 宽度和最小高度在布局时,除非由 fixed_width和fixed_height属性所确定, 这两个尺寸都可以被扩展3、布局属性和尺寸属性¨2) 对齐属性(Alignment)¨ 该属性用于指定一个控件组中 控件的对齐方式对按列排列 的控件组,其子控件可以取left 、right或centered,默认值为left 对按行排列的控件组,其子 控件可以取top、bottom或 centered,默认值为centered。
¨1)is_enabled: 取值true或false,默 认值为true¨ 该属性用于指定控件初始是否可 用若指定为false,则该控件被初 始禁止,即开始显示对话框时,该 控件变灰,可见但不可选择在程 序运行时,可由mode_tile函数改变 其状态4、功能属性¨3)mnemonic: 该属性用于给控件指定键 盘助记符它的值是单个字符的字符串 ,并且该字符必须是控件标签(label)中 的一个大小写一致的字母使用该属性 是为了在操作对话框时,通过助记符改 变聚焦,但不选择控件该属性没有默 认值 2)is_tab_stop: 取值true或false,默 认值为true用于指定是否可用Tab 键在控件之间移动焦点¨4)action: ¨ 该属性用于给控件指定一个 VLISP表达式当用户选择该控件 时,就执行这个表达式属性值必 须是一个字符串形式的有效的 VLISP表达式,但不能是AutoLISP 中的command函数该属性没有默 认值 ¨(一) DCL文件结构 ¨ 定义对话框的文件是一个文本文 件(ASCII码文件),可在文本编 辑器中编写,该文件的扩展名为 *.dcl。
系统定义的对话框存放在 acad.dcl中,文件base.dcl中也为用 户提供了许多预定义的标准控件¨一个对话框本质上为树状结构形式 5.4 DCL文件的编写方法¨对话框名称 :dialog{label=“主标题”;¨ :控件名1{label=“控件标题”;¨ key=“关键字”;¨ 其它属性…}¨ :控件名2{……… }¨ ………¨ }DCL文件的编写格式¨(二) 用DCL语言设计对话框 ¨ 示例1:¨Hello:dialog{¨label=“sample Window”;¨:text{label=“hello world!”;}¨Ok_only;¨}¨在VLISP编辑器中,可通过“Tools”=>¨“Interface Tools”预览所设计对话框¨示例2:dxan:dialog{¨label=“确定图纸幅面“; ¨:boxed_radio_row{label=“幅面规格“; ¨:radio_button{label=“A0“; key=“a0“; } ¨:radio_button{label=“A1“; key=“a1“; } ¨:radio_button{label=“A2“; key=“a2“; } ¨:radio_button{label=“A3“; key=“a3“; } ¨:radio_button{label=“A4“; key=“a4“; } ¨:radio_button{label=“A5“; key=“a5“; value=5;} ¨} ¨ok_cancel; ¨}¨示例3:¨yuan:dialog{label=“绘制圆“;¨:edit_box{label=“圆心X(mm)=“;¨mnemonic=“X“;key=“X“;value=50;}¨:edit_box{label=“圆心Y(mm)=“;¨mnemonic=“Y“;key=“Y“;value=50;}¨续前:¨:edit_box{label=“半径R(mm)=“;¨mnemonic=“R“;¨key=“R“;value=25;}¨ok_cancel;¨}¨示例4 :¨示例4的显示结果:¨示例5:¨示例5的显示结果:¨第六讲 对话框的程序驱动¨能够编写对话框文件,仅仅是迈出了对 话框设计的第一步,事实上,编写对话 框文件比较容易,而要控制对话框,使 之实现应有的功能,就要下更大的功夫 。
要显示编写的对话框并有效控制它, 需要结合AutoLISP编程AutoLISP提供 了处理对话框的各种管理函数,利用它 们可以实现DCL文件的各种控制¨1) action_tile函数¨格式: ¨(action_tile 控件操作名 动作描述符)¨功能:将控件与操作表达式联系起来 当用户选择了该控件时,就执行操作表 达式所指定的内容 ¨例: (action_tile “a3” “(setq l 594 h 420 c 5)”)¨ (action_tile “accept” “(done_dialog)”) ¨ (action_tile “cancel” “(setq a –1) (done_dialog)”)6.1 常用对话框处理函数¨2) add_list函数¨格式:(add_list 字串)¨功能:将指定的字串加入到当前已激活的列 表中 ¨例: (add_list “1 1.5 2 2.25 2.5 3 3.5 4 5”)¨3) client_data_tile函数¨格式: ¨(client_data_tile 控件操作名 数据属。