)
(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\ ) )
相关推荐: