可视opendcl的学习笔记 联系客服

发布时间 : 星期一 文章可视opendcl的学习笔记更新完毕开始阅读3dde3629e2bd960590c67733

)

(setq #IsShow T) )

;单击TextButton1[拾取图元<]按钮

(defun c:DclForm1_TextButton1_OnClicked (/ nLine ent eData eType eLayer eColor nImage) (while(and #IsShow (setq ent(entsel \拾取一个图元:\ (if #IsShow (progn

(setq ent(car ent)) ;给表格添加新行

(setq eData(entget ent))

(setq eType(cdr(assoc 0 eData)) eLayer(cdr(assoc 8 eData)) ) (setq eColor(assoc 62 eData))

(setq eColor (if eColor (itoa(cdr eColor)) \随层\

(Setq nLine(Odcl_ListView_AddItem \ (list eType eLayer eColor)) )

;给指定单元格设置图标 (setq nImage (cond

((= eType \

((= eType \ ((= eType \ ((= eType \ ((= eType \ (t 5) ) )

(Odcl_ListView_SetItemImage \

nImage)

(setq nLine(strcat \图元数:\

(Odcl_Control_SetProperty \ ) ) ) )

;单击TextButton2[退出]按钮

(defun c:DclForm1_TextButton2_OnClicked () (Odcl_Form_Close \ )

;处理对话框关闭事件

(defun c:DclForm1_OnClose (nUpperLeftX nUpperLeftY /) (setq #IsShow F) )

3. 运行MyModeless

进入AutoCAD2000,加载MyModeless.lsp。执行MyModeless命令,显示的对话框如图3.2所示,只是对话框中的表格是空白的。

点击拾取图元按钮,在Acad的命令行上出现提示:“拾取一个图元”。选择一个图元,则ListView中就添加一行记录。按鼠标右键,可退出选择图元状态,但对话框依然存在。你可以对Acad作其它操作。重新点击对话框的拾取图元按钮,又可以继续选择图元,显示图元的属性。选择了8个图元后的对话框如图3.2所示。

单击[退出]按钮,即退出对话框。

这个话题我们就讨论到这里。下一次,我们将对可停靠对话框和树形控件的设计和编程进行讨论。

ObjectDCL学习笔记(4)

可停靠对话框和树形控件

支持可停靠对话框是我们使用ObjectDCL的又一个理由。在AutoCAD中,“对象特性”对话框就是可停靠对话框的一个例子。使用可停靠对话框可大大增强用户与ActoCAD的交互操作能力,也使我们的程序显得更专业。

这一次,让我们一起创建一个带树控件的可停靠对话框,并通过选择树的子节点事件,在AutoCAD的窗口中绘制相应的图形。新创建的ObjectDCL文件名为MyDockable.odc,关联的Lisp文件名为MyDockable.lsp,还是都存放到D:\\MyODcl文件夹中。 1. 创建可停靠对话框

1.1设计对话框

运行ObjectDCL.exe,进入ObjectDCL编辑环境。在Projects菜单中选择添加可停靠对话框菜单项(Add Dockable Form)就得到了一个非模式对话框,然后像图4.1那样,摆上一个TreeControl控件。

1.2设置控件的属性

打开属性向导(Property Wizard)对话框。在字体属性页中,把Font置为“宋体”,Size设置为10;在图片属性页中,添加4个图标,分别用于树形控件父节点的一般状态、展开状态、子节点的一般状态、选中状态。

2.给对话框的事件编程

2.1创建树形控件的函数

因为树形控件的节点创建函数中的参数比较多,我们先对树形控件的几个主要函数的语法结构作一个简单的说明。

(1)添加父节点的函数 (Odcl_Tree_AddParent

ProjectDialogControlName ;工程-对话框-控件名 Text [as String] ;节点标题

[optional] Key [as String] ;节点名

[optional] ImageIndex [as Integer] ;节点图标索引

[optional] SelectedImageIndex [as Integer] ; 选中节点图标索引 [optional] ExpandedImageIndex [as Integer] ; 展开节点图标索引 )

(2)添加子节点的函数 (Odcl_Tree_AddChild

ProjectDialogControlName ;工程-对话框-控件名 ParentKey [as String or Long] ; 父节点名 Text [as String] ;节点标题

[optional] Key [as String] ;节点名

[optional] ImageIndex [as Integer] ;节点图标索引

[optional] SelectedImageIndex [as Integer] ; 选中节点图标索引 [optional] ExpandedImageIndex [as Integer] ; 展开节点图标索引 )

上面是不带参数表的函数形式,它们还有带参数表的函数形式,可参见ObjectDCL的Object Browser中的函数定义和MyDockable.lsp中的具体写法。

2.2对话框初始化函数 ;对话框初始化

(defun c:DclForm1_OnInitialize ()

;添加线状图形父节点

(Odcl_Tree_AddParent \线状图形\

\

(Odcl_Tree_SetExpandedImage \ ;添加线状图形的子节点

(Odcl_Tree_AddChild \

(list (list \直线\ (list \多线\ (list \多段线\

) )

;添加圆状图形父节点

(Odcl_Tree_AddParent \圆状图形\

\

(Odcl_Tree_SetExpandedImage \

)

2.3处理树控件的单击事件

;TreeControl1的单击事件,在Acad的窗口中画对应的图形 (defun c:DclForm1_TreeControl1_OnClicked()

(setq #SelectedKey

(Odcl_Tree_GetSelectedItem \ )

(if(not(equal #LastSelKey #SelectedKey))

(cond

((= #SelectedKey \

((= #SelectedKey \ ((= #SelectedKey \ ((= #SelectedKey \

((= #SelectedKey \

'(24 23)))

((= #SelectedKey \ ((= #SelectedKey \ ((= #SelectedKey \ ((= #SelectedKey \ ) ) )

2.4 MyDockable的主程序

关于MyDockable的主程序,其结构和前几个程序完全一样,就不用说什么了。为了程序的完整,也写在下面:

(defun c: MyDockable () (ObjectDCL_LoadArx)

(Odcl_LoadProject \

(Odcl_Form_Show \

1)

;添加圆状图形的子节点

(Odcl_Tree_AddChild \ (list (list \圆\ (list \椭圆\ (list \圆环\ ) )

;添加文字图形父节点

(Odcl_Tree_AddParent \文字图形\

0 0)

(Odcl_Tree_SetExpandedImage \ ;添加文字图形的子节点

(Odcl_Tree_AddChild \ (list (list \文字1\ (list \文字2\ (list \文字3\ ) )