找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1470|回复: 14

[LISP程序]:ObjectDCL 问题之二

[复制链接]
发表于 2002-11-21 12:04:47 | 显示全部楼层 |阅读模式

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

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

×
这是我写的ODCL中TreeControl的应用示例。
其中有几个问题需请教XD和QLIN:
1.图中qdsoft幻灯片怎么不能显示,它左边的图标又如何不见?
2.为什么较复杂的幻灯片会显示得很凌乱,如图中。是不Odcl_SlideView_Load本身的问题?

CODE:
;;;
;;;编写: HQD9639
;;;
;;;日期: 2002/11/19
;;;
;;;需要 ***XDRX_API*** 支持
;;;
;;;===========================加载objectdcl.arx函数============================
;;;
(defun ObjectDCL_LoadArx ()
   (if (not (member "objectdcl.arx" (arx)))
       (arxload "objectdcl.arx" "ObjectDCL.arx not found.")
   )
)
;;;
;;;**************************************START**************************************
;;;
(defun c:showslb (/)
   (ObjectDCL_LoadArx)
   (Odcl_LoadProject "showslb.odc" T)
   (Odcl_Form_Show showslb_DclForm1)
   (princ)
)
;;;
;;;初始化============================================================================
;;;
(defun c:DclForm1_OnInitialize ()
  (Odcl_Form_SetTitleBarText showslb_DclForm1 "幻灯片库浏览器")
)
;;;
;;;-------------------------------------------------------------------------------
;;;
(defun c:DclForm1_TextButton2_OnClicked ()
    (setq fslb (GetFiled "请选取幻灯片库文件" "" "slb" 8))
    (if fslb
        (progn
           (setq fpath (xdrx_string_tok fslb "\\"))
           (setq fp (reverse fpath))
           (setq fp (car fp))
           (setq fnam (xdrx_string_tok fp "."))
           (setq fnam (car fnam))
           (showslb)
        )
    )   
)
;;;
(defun showslb ()
  (Slblist)
  (setq nnCount (Odcl_Tree_CountItems showslb_DclForm1_TreeControl1))
  (Odcl_Tree_Clear showslb_DclForm1_TreeControl1)
  (if (= nnCount 0)
      (progn
          (Odcl_Tree_AddParent showslb_DclForm1_TreeControl1 "qdsoft" "t3")
          (Odcl_Tree_AddParent showslb_DclForm1_TreeControl1 fnam "t1")
          (Odcl_Tree_AddChild showslb_DclForm1_TreeControl1 slb_sldlst)
      )
  )
)
;;;
(defun Slblist ()
    (setq slb_sldlst '())
    (setq mm 1)
    (setq slb_sld (xdrx_slide_list fslb))
    (foreach n slb_sld
       (setq slb_sldlst1 (list (list "t1" n (strcat "C" (itoa mm)))))
       (setq slb_sldlst (append slb_sldlst slb_sldlst1))
       (setq mm (1+ mm))
    )
)
;;;
;;;
;;;幻灯片库预览--------------------------------------------------------------------------------
;;;
(defun c:DclForm1_TreeControl1_OnSelChanged (sSelText SelKey /)
   (Setq rValue (Odcl_Tree_GetParent showslb_DclForm1_TreeControl1 SelKey))
   (if (= rValue "")
       (progn
           (setq fn1 (strcat sSelText ".sld"))
           (if (FindFile fn1)
               (Odcl_SlideView_Load showslb_DclForm1_SlideView1 fn1)
               (Odcl_SlideView_Clear showslb_DclForm1_TreeControl1)
          )
      )
      (progn
          (setq fn2 (Odcl_Tree_GetItemText showslb_DclForm1_TreeControl1 rValue))
          (Odcl_SlideView_Load showslb_DclForm1_SlideView1 (strcat fn2 ".slb") sSelText)
     )
  )
)
;;;
;;;-------------------------------------------------------------------------------------
;;;
(defun c:DclForm1_TextButton1_OnClicked ()
  (Odcl_Form_Close showslb_DclForm1)
)
;;;
;;;**************************************************************************************
;;;
(princ)
;;;
;;;***************************************结束*******************************************
;;;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2002-11-21 12:06:34 | 显示全部楼层
附件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-21 16:11:58 | 显示全部楼层
1、对于父节点,Odcl_Tree_GetParent函数的返回值为nil,而不是""
2、slb文件名控制有些混乱,odcl和XD的函数要求用包含完整路径的全名
3、幻灯显示混乱还没找到原因,可能是slide制作版本问题,odcl对旧版slide支持可能有问题

修改过的lisp程序,你试试看:

  1. (defun c:DclForm1_TextButton2_OnClicked (/ slb_sldlst)
  2.     (setq fslb (GetFiled "请选取幻灯片库文件" "E:\\QLIN\\odcl_slb\" "slb" 0));***change 1
  3.     (if fslb
  4.         (progn
  5.            (setq fpath (xdrx_string_tok fslb "\"))
  6.            (setq fp (reverse fpath))
  7.            (setq fp (car fp))
  8.            (setq fnam (xdrx_string_tok fp "."))
  9.            (setq fnam (car fnam))
  10.            (showslb)
  11.         )
  12.     )   
  13. )

  14. .....
  15. 字数太多不给发,请看附件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2002-12-1 18:39:40 | 显示全部楼层
OnClicked只能由鼠标引发,键盘操作可用keydown事件,但只能获得旧的key,
要是有keyup事件就好了,可惜目前的odcl还没有提供。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2002-12-18 22:32:29 | 显示全部楼层
很抱歉,我的机器上没有Autodesk LayerControl这个ActiveX控件,没法调试你附带的程序。
也因为ActiveX的可变性,使得利用它开发的程序发布上有些困难,所以我也很少用它来编程。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-12-19 08:57:52 | 显示全部楼层
Qlin:现把activeX附上,它提供的一些事件和方法不太明白怎么用,还是麻烦你看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-12-23 22:09:26 | 显示全部楼层
1、在c:DclForm1_OnInitialize阶段,除了用AddLayer添加层列表以外,
  还需要设置层的状态,为此,你的layerlst函数还要记录层的颜色、
  线型、显示状态、冻结状态....等等信息,建议组成关联表,取数据的
  时候方便;然后,使用控件提供的SetLayerColor,SetLayerCvpThaw,
  SetLayerLock,SetLayerOn,SetLayerPlot等方法在对话框中设置那些
  表示层信息的小图标;
2、在对话框运行过程中,点击那些小图标,会产生类似XX_color,XX_CvpThawFreeze,
  XX_LockUnlock,XX_NvpThawFreeze,XX_PlotNoplot等事件,表示你想改变
  层的颜色、线型、显示等状态,在这些回调函数中,可以改变层数据关联表
  (就是刚才启动时候建立的,当然,也可以即时改变DWG的层表信息),有些
  项目如颜色、线型等非开关选项,还要自己编写设置代码;
3、设置完成,退出对话框,在OnClose事件函数里,需要根据刚才修改层数据关联表,
  更新当前图形的层表信息,然后再生成一次,就能看到层的更改情况了。

大概过程就是这样吧,很抱歉,最近特别忙,没时间把上述过程用lisp代码实现,
仅把对这个控件的研究结果写出来,希望能有所帮助。老实说,这个控件的自动化
程度太低,仅仅是提供了一个界面,也许在某些需要定制层的程序有用。

另外,这个控件在我的系统上不太稳定(Windows 2000+ACAD 2002),在层数较多
的时候,一拖动滚动条就会令AutoCAD崩溃。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-12-24 09:52:22 | 显示全部楼层
谢谢你在百忙中还抽空回答我的问题。
    1。针对这个控件我也觉得其的自动化程度太低,很繁,不够实用。
    2。另外,用了这么久的ODCL,个人感觉ODCL技术不够成熟,稳定性不好,如运行ODCL后有时桌面上的图标会变得乱七八糟,ODCL编辑器有时会变得一遍空白,用其开发的程序有时会令AutoCAD崩溃等。我想这也许是喜欢它的人不多的原因吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-12-24 23:01:41 | 显示全部楼层
不用客气,现在用ODCL的人很少,难得有同好可以讨论。
ODCL的功能很强大,就我的感觉,如果不用ActiveX,其它的控件还是
比较稳定的,当然,因为它提供了如Modeless和Dockable等形态的对话框,
若控制的不好,代码出错的机会比以前是要多些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-12-24 23:05:48 | 显示全部楼层
最初由 hqd9639 发布
[B]谢谢你在百忙中还抽空回答我的问题。
    1。针对这个控件我也觉得其的自动化程度太低,很繁,不够实用。
    2。另外,用了这么久的ODCL,个人感觉ODCL技术不够成熟,稳定性不好,如运行ODCL后有时桌面上的图标会... [/B]


普通的模式对话框应该说足够稳定的,这些就足够让我们喜欢ODCL了。

运行不稳定主要还是我们的LISP写的不够强壮,多加下代码效验在里面吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-12-25 09:58:20 | 显示全部楼层
刚接触ODCL时,的确让我兴奋了一阵子,可后来发现一些问题(1、试用版的原因,2、在内存中留下许多命令,3、部分ActiveX控件不能正常工作等),现在我已经不敢用ODCL了,改用VLSP+VBA了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-12-25 17:28:38 | 显示全部楼层
最初由 lijiao 发布
[B]刚接触ODCL时,的确让我兴奋了一阵子,可后来发现一些问题(1、试用版的原因,2、在内存中留下许多命令,3、部分ActiveX控件不能正常工作等),现在我已经不敢用ODCL了,改用VLSP+VBA了。 [/B]


LIJIAO,能对你说的1,2,3 详细展开和大家讨论下吗?(开新主题)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 06:45 , Processed in 0.356190 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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