找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2430|回复: 6

[文章]:用ObjectDCL做对话框

[复制链接]
发表于 2006-3-4 16:06:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
ObjectDCL 是 3rd Day software 公司的著名产品, 曾在2001年;两度获得The CAD Depot (www.caddepot.com)一周最佳CAD工具称号.如果您擅长ObjectARX编程,您不需要ObjectDCL, 如果您钟爱LISP/VLISP, 那么, ObjectDCL 将是您不可缺少的威力工具.

ObjectDCL 是第三方开发者为AutoCAD新增的一种对话框工具语言, 它编辑简单, 功能强大, 使您通过LISP就能充分利用Windows资源, 完全可以替代AutoCAD的DCL语言。就象Autodesk 收购了加里佛尼亚Brian Segers 和Robbie Creamer 的Visual Lisp, 进而形成AutoCAD内置的VLISP 语言一样, 我有种预感:ObjectDCL(或这种思路)会成为AutoCAD未来的一种新的内置扩充DCL语言。

1、ObjectDCL 的工作原理。
首先,ObjectDCL是一个可视化编辑器,用它可以编辑出您需要的对话框,存储为 .ODS 和.ODC文件,ODC是ObjectDCL的编辑文件,.ODS是ObjectDCL 输出的成果文件,也就是用户得到的可以用于LISP程序的文件。

其次,ObjectDCL 提供给用户一个ARX文件,这个ARX文件定义了.ODS所有控件的LISP函数,要在AutoCAD环境中先装载这个ARX文件,然后,利用其定义的LISP函数调用.ODS文件并控制其所有控件。

                               
登录/注册后可看大图

2、实战
或许您还不够清楚,那么就让我们在实战中慢慢体会。
在ObjectDCL中添加一个Modelless Form(图1) ,


                               
登录/注册后可看大图

修改Property中的(name)和TitleBarText(图2)。

                               
登录/注册后可看大图

您将获得一个基本的对话框(图3),将其存储为mydcl.odc(同时一个同名的.ods文件也被存储)。

                               
登录/注册后可看大图

点击左边的”T”图标,然后,用鼠标在对话框中选择位置(窗口)添加文本(Label)到对话框中(图4),

                               
登录/注册后可看大图

修改property中的Caption为“输入文本”(图5),


                               
登录/注册后可看大图

您的到图6。

                               
登录/注册后可看大图


用同样的办法,在对话框中添加TextBox1文本输入框和TextButton按钮两项,修改Caption后,获得如图7对话框。这就是我们要在AutoCAD中使用的对话框。实战001目的在于通过输入文本,然后点击“实战001”按钮,将输入的文本内容Prompt到AutoCAD命令提示行。

                               
登录/注册后可看大图


在AutoCAD的AutoLISP编辑器中编辑一个如下的LISP程序:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;实战 Objectdcl 实例 ....
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:myDCL ( / )
  (objectdcl_loadarx)
  (Odcl_LoadProject "mydcl" T)
  (Odcl_Form_Show "mydcl" "Dcl001")
  (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;自动加载 ObjectDCL.ARX 文件程序...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun objectdcl_loadarx ()
  (if (not (or (findfile "Objectdcl2000.arx")(findfile "objectdcl2004.arx")))
    (progn
      (alert "ARX: OBJECTDCL.Cannot be found !.")
      (exit)
    ) ; end progn
    (progn
      (cond
        ((= (atoi (substr (getvar "acadver") 1 2)) 15)
         (if (not (member "objectdcl2000.arx" (arx)))
           (arxload (findfile "objectdcl2000.arx"))
           )
         )
        ((= (atoi (substr (getvar "acadver") 1 2)) 16)
         (if (not (member "objectdcl2004.arx" (arx)))
           (arxload (findfile "objectdcl2004.arx"))
           )
         )
      ) ; end cond
    ) ; end progn
  ) ; end if
)

把mydcl.ods, mydcl.lsp和objectDCL2000.arx放在AutoCAD的搜索路径,加载mydcl.lsp程序后,在AutoCAD中运行“mydcl”命令,就可以显示对话框了。


                               
登录/注册后可看大图

但是,这个对话框仅仅能够显示,各种控件还没有控制。


回到ObjectDCL中,将mydcl.ods和mydcl.lsp相互关联。在Project栏的Visual/Autolisp file name 处右键鼠标,选Set Viuaal/Autolisp File Name, 然后指定到前面编辑的mydcl.lsp文件,关联完毕。


                               
登录/注册后可看大图


下面,我们给“实战001”按钮添加LISP控制程序。在ObjectDCL中击活按钮“实战001”,然后点击property中的Events,选种Clicked前面的复选框,一段LISP代码自动生成(图10),点击下部的”Add to .lsp  File”,这段代码将被添加到上面关联的mydcl.lsp文件中。


                               
登录/注册后可看大图


当您回到AutoLisp编辑器时,您回得到提示,选择“是(Y)”,这段代码就加到mydcl.lsp中了。


                               
登录/注册后可看大图


这段代码如下:
(defun c:Dcl001_TextButton1_Clicked ()
     (Odcl_MessageBox "To Do: code must be added to c:Dcl001_TextButton1_Clicked" "To do")
)

他的意思就是:点击“实战001”按钮所要进行的动作。我们下面要作的就是把(Odcl_MessageBox "To Do: code must be added to c:Dcl001_TextButton1_Clicked" "To do")修改成我们需要的代码。

我们计划,点击“实战001”按钮时,读取TextBox1中的内容,promp到AutoCAD.要作到这一点需要使用ObjectDCL.ARX提供的函数,这些函数可以从ObjectDCL的帮助文件中获得,这里我们需要函数:Odcl_Control_GetProperty, 这是一个常用的LISP函数, 具体代码是:
(setq mystring (Odcl_Control_GetProperty  "mydcl" "Dcl001" "TextBox1" "Text" ))要在AutoCAD中Prompt, 大家都知道,是:(princ (strcat "\n" mystring))。至此,大功告成。无论您在文本框中输入什么,点击“实战001”按钮时都会在AutoCAD中提示!

仔细阅读ObjectDCL帮助文件,您就会成为一名ObjectDCL高手,掌握了ObjectDCL, 即便是您只会Viual/AutoLISP编程,您的程序界面将比ObjectARX高手的毫不逊色!

文章涉及的实利程序源码见附件

****************************
我的一些用ObjectDCL编辑的对话框示例



                               
登录/注册后可看大图


                               
登录/注册后可看大图


                               
登录/注册后可看大图

.....

                               
登录/注册后可看大图


                               
登录/注册后可看大图

......
比较复杂的对话框

                               
登录/注册后可看大图


                               
登录/注册后可看大图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-6-1 01:42:38 | 显示全部楼层
怎么没有定义Textbox1这个文本控件呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-2 08:05:01 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-2 19:06:59 | 显示全部楼层
very good
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2008-5-9 22:31:23 | 显示全部楼层
好像ObjectDCL需要加载第三方程序,而且针对CAD的版本要加载不同的arx
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-2-27 17:38:13 | 显示全部楼层
你用objectdcl做的对话框很精彩。请教listbox中的选中项如何修改它的内容?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-3-2 20:05:31 | 显示全部楼层
学习了.......................
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-9 22:11 , Processed in 0.482202 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表