ObjectDCL学习笔记(1)
初识ObjectDCL
AutoLisp简洁、易学、功能强大,可满足用户的绝大多数需求。对一般的AutoCAD用户来说,AutoLisp是进行开发的首选语言。但AutoLisp使用的对话框编程语言DCL和PDB却实在不敢恭维,其功能、界面、编程方法都不能令人满意。
ObjectDCL应运而生。 1.安装和设置ObjectDCL
1.1运行ObjectDCL文件包中的Setup.exe,一路Next下去,ObjectDCL就被安装到C:\\Program Files\\3rd Day Software\\ObjectDCL文件夹中。
1.2在安装ObjectDCL的文件夹中,有ObjectDCL.arx和ObjectDCL2004.arx两个arx库文件。ObjectDCL.arx用于Acad2000/2002,ObjectDCL2004.arx用于Acad2004。为方便编程,把它们拷贝到Acad的支持搜索路径中,或直接把安装ObjectDCL的文件夹设置为Acad的支持搜索路径。
1.3创建一个准备存放ObjectDCL编程结果的文件夹,假设为D:\\MyOdcl。把D:\\MyOdcl也设置为Acad的支持搜索路径。
现在就可以开始学习ObjectDCL了。 2.启动和认识ObjectDCL
在安装ObjectDCL的文件夹中,有个ObjectDCL.exe文件,它就是ObjectDCL的主程序。运行ObjectDCL.exe,即进入ObjectDCL编辑环境。
ObjectDCL的主窗口很简洁,各菜单项的意义也很清楚,且大部分都在工具条和4个停靠子窗口中有对应的功能,而View菜单是ObjectDCL工具条和下面要说明的4个工具停靠子窗口的开关。工具条中的第一个图标对应的是工程菜单Project的前5个菜单项,用来添加对话框窗体;工具条中的最后一个图标(照相机)对应的是工程菜单View/Edit Picture Folder菜单项,用来管理图形资源文件夹。
在ObjectDCL窗体的左侧,上面是控件工具箱(ToolBox),下面是控件上下次序显示调整窗口(Z/Tab Order)。
在ObjectDCL窗体的右侧,上面是工程结构树窗口(Project Tree),下面是对话框/控件属性(Properties)和事件(Events)窗口。
ObjectDCL窗体的中间,就是以后摆放新创建的对话框的位置了。 3.创建一个最简单的对话框
既然是要创建一个最简单的对话框,那就是所谓的“Hello”了。 3.1编写对话框驱动程序框架
在开始创建对话框以前,先创建一个对话框驱动程序的框架:
(defun C:MyHello()
(if (not (member \
(arxload \加载objectdcl.arx 失败.\ )
(princ) )
以MyHello.lsp为名保存到D:\\MyOdcl文件夹中备用。建议,MyHello.lsp的编辑器不要关闭,我们下面还要用到它。
3.2创建对话框
(1)在Projects菜单中选取Add Modal Form菜单项,窗体中就添加了一个没有控件的对话框。这个对话框的默认名为DclForm1。用鼠标单击对话框窗体,则ObjectDCL窗体中右下方的属性页(Properties)中显示出当前对话框的所有属性值。把标题栏文本 (TitleBarText)项的内容改为:“Hello”。
(2)在控件工具箱中选择Label控件放到对话框适当的位置。这个Label控件的默认名为Label1。 把Label1的标题(Caption)内容改为:“各位网友,新年好!”。 把Label1的字体(Font)改为你喜欢的字体和大小。 把Label1的背景颜色(BackColor)改成你喜欢的颜色。 把Label1的前景颜色(ForeColor)改成你喜欢的颜色。 调整对话框和Label1的大小。 (3)保存对话框文件
直接单击“Save”工具图标,把新设计的对话框以Hello.odc为名保存到D:\\MyOdcl文件夹中。我们这个Hello对话框就制作完成了。
3.3指定与对话框关联的Lisp程序
展开工程结构树窗口中的Visual / Auto Lisp File name节点,双击图标,在弹出的“打开”对话框中选择我们已预备好的程序文件D:\\MyOdcl\\MyHello.lsp。则两者就关联了起来。
4.完善控制对话框的Lisp程序
为了能让上面设计的对话框显示出来,需要在MyHello.lsp中添加几条命令。用鼠标右键点击对话框窗体中没有任何控件的位置,在弹出的鼠标菜单中选择Object Browser,则弹出Object Browser对话框。
4.1在Object Browser对话框中找到并选中Loadproject项,其右侧显示加载工程项的方法定义。点击[Copy To Clipboard] 按钮,则函数的定义已被复制到剪切板里。
进入MyHello.lsp的编辑器,把剪切板里的内容复制到MyHello.lsp程序的(princ)语句的前面。然后把这条新语句
(Odcl_LoadProject FileName [as Integer] [Optional] Reload [as T])
改为
(ODcl_LoadProject \
4.2在Object Browser对话框中找到并选中Show项,把Show方法的函数定义复制到MyHello.lsp程序的(princ)语句的前面。然后把这条新语句
(Odcl_Form_Show MyHello_DclForm1 [Optional] UpperLeftXCoordinate [as Integer] [Optional] UpperLeftYCoordinate [as Integer]) 改为
(Odcl_Form_Show \ 4.3完整的MyHello.lsp
(defun C:MyHello()
;确保加载ObjectDcl动态连接库 (if (not (member \
(arxload \加载objectdcl.arx 失败.\ )
;加载对话框odc文件
(ODcl_LoadProject \ ;显示DclForm1对话框
(Odcl_Form_Show \ (princ) )
5.运行MyHello
进入AutoCAD2000,加载MyHello.lsp。执行MyHello命令,显示的对话框如图所示。
通过上面的讨论,我们已经对ObjectDCL有了一个初步的了解。MyHello对话框尽管太简单,但包括了创建ObjectDCL对话框和编写对话框驱动程序的基本过程。下一次,我们再编制一个复杂一点的对话框,并对控件的事件进行编程。
注:本文经作者同意在本站使用,本来要放到CAD杂志中,但由于杂志一直不能出版,故先在此使用。
ObjectDCL学习笔记(2)
ObjectDCL控件的属性和事件
在ObjectDCL 2.1的控件工具箱中,有30个控件,其中的部分控件是DCL没有的。让我们用常用的控件创建一个稍微复杂的对话框,以便对控件的属性设置、属性提取和事件进行讨论。
在设计对话框之前,建议还是先创建一个AutoLisp框架程序,文件名叫MySetVar.lsp,还是存放到
D:\\MyODcl文件夹中。
1.对话框的静态属性设置
1.1设计对话框
运行ObjectDCL.exe,进入ObjectDCL编辑环境。添加一个模式对话框Form,然后像图2.1那样,摆上各个控件。然后,以MySetVar.odc为名存盘。当然,还是保存在D:\\MyODcl文件夹中。
1.2设置控件的属性
控件TextButton1:把Caption的属性值改为“浏览 <”。
控件TextButton2:把Caption的属性值改为“确 定”,把Enabled的属性值改为“False”。 控件TextButton3:把Caption的属性值改为“取 消”。 控件ComnoBox1:在List的属性值中输入:
AutoCAD DWG MicroStation DGN MapInfo MIF/MID ArcViewGIS Shape
控件ComnoBox2:不做改动。
控件ComnoBox3:在List的属性值中输入:
1:500 1:1000 1:2000
控件OptionList1:不做改动。 1.3指定对话框的关联程序
展开工程结构树窗口中的Visual / Auto Lisp File name节点,双击图标,在弹出的“打开”对话框中选择我们已预备好的框架程序文件D:\\MyOdcl\\ MySetVar.lsp。
2.给对话框的事件编程
在编辑器中打开对话框关联程序,MySetVar.lsp现在是下面的样子: (defun c:MySetVar(/ #file #form #map #scale #type #stat) ; Ensure the ObjectDCL.arx file is loaded (ObjectDCL_LoadArx)
; Call the method to load the odc file. (Odcl_LoadProject \
; Call the method to show the dialog box
(Odcl_Form_Show \ (if #stat (progn
(setq #file (strcat \图形文件 = \ (setq #form (strcat \数据格式 = \ (setq #map (strcat \图幅编号 = \ (setq #scale(strcat \比 例 尺 = \ (setq #type (strcat \数据类型 = \
(princ (strcat \
相关推荐: