cag 发表于 2007-6-4 14:27:00

[求助]如何自定义双击反应器

<p></p><p>我想写个反应器,在双击一个AutoCAD的实体后,不执行系统默认的命令,而是执行一段自定义的函数。</p><p>我在双击事件的反应器的回调函数里把AcDblClkEdit.arx卸载了,然后再执行自己定义的函数之后,再把AcDblClkEdit.arx加载,结果,自定义的函数是执行了,但是系统默认的命令也被执行,该怎么做才能不执行系统默认的命令???</p><p>谢。</p>

飞诗(fsxm) 发表于 2007-6-4 23:00:00

本帖最后由 作者 于 2007-6-4 23:02:58 编辑

兄弟用过fsxmzbbz坐标标注么?试试里面的双击反应器吧!
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=59742
在写fsxmzbbz时已将双击反应器做成了通用函数了
更多lisp源程序请参见:http://fsxm.bokee.com/

(if (null *fsxm-DoubleClick-Reactor*)
(setq *fsxm-DoubleClick-Reactor*
(vlr-mouse-Reactor
    "Fsxm.app"
    '((:vlr-beginDoubleClick . fsxm-mouse-DoubleClick-callback))
)
)
)
(vl-catch-all-apply 'arxunload '("acdblclkedit.arx"))
(vl-catch-all-apply 'arxload '("acdblclkedit.arx"))
(defun Fsxm-Mouse-DoubleClick-Callback
       (Reactor Point / selp_date strFun)
(setq DoubleClick_Point (trans (car Point) 0 1))
(if (setq selp_date (nentselp DoubleClick_Point))
    (progn
      (if (> (length selp_date) 2)
(setq DoubleClick_en (last (last selp_date)))
(setq DoubleClick_en (car selp_date))
      )
      (if (and (setq strFun (vlax-ldata-get
         DoubleClick_en
         "Fsxm-DoubleClick-Function"
       )
      )
      (vl-symbol-value (read strFun))
   )
(progn
   (vl-catch-all-apply 'arxunload '("acdblclkedit.arx"))
   (sssetfirst nil)
   (if (= (substr strFun 1 1) ":")
   (vl-catch-all-apply
       (read strFun)
       (list DoubleClick_en DoubleClick_Point)
   )
   (vla-SendCommand
       (vla-get-ActiveDocument (vlax-get-acad-object))
       (strcat "("   strFun
      " DoubleClick_en"" DoubleClick_Point"
      ") "
       )
   )
   )
   (vl-catch-all-apply 'arxload '("acdblclkedit.arx"))
)
      )
    )
)
)
(defun Fsxm-Reactor-DoubleClick (en strFun)
(cond ((null strFun)
(vlax-ldata-delete en "Fsxm-DoubleClick-Function")
)
((= (type strFun) 'str)
(vlax-ldata-put en "Fsxm-DoubleClick-Function" strFun)
)
(t
(vlax-ldata-get en "Fsxm-DoubleClick-Function" strFun)
)
)
)
;;;(setq en (car (entsel)))
;;;(Fsxm-Reactor-DoubleClick en "test")
;;;(defun test (DoubleClick_en DoubleClick_Point) .......
;;;适用于想轻松拥有双击时屏避系统自带编缉对话框,且调用自定义函数!
;;;如果你还不太会双击反应器或你需要一个通用而简单的调用过程我相信这就是你需要的!
;;;一个简单的调用,即可让你轻松拥有专业的双击效果!还不快试试!
;;;如果回调中没有交流函数可以用":"开头做函数名,这样回调时不会在命今行回显!
测试代码:
(setq en (car (entsel)))
(Fsxm-Reactor-DoubleClick en "test")
(defun test (DoubleClick_en DoubleClick_Point)
(alert
    (strcat "你双击的对像是:"
   (VL-PRINC-TO-STRING DoubleClick_en)
   "双击时的点是:"
   (VL-PRINC-TO-STRING DoubleClick_Point)
    )
)
)

cag 发表于 2007-6-5 09:14:00

本帖最后由 作者 于 2007-6-5 13:12:48 编辑 <br /><br /> <p>太感谢了,我就是看了你写的坐标标注,才想搞清这个是怎么实现的。</p><p>不用在2008里,双击时还是会执行系统默认的命令,我用的是2008英文版,如果去卸载acdblclkeditpe.arx后,也是正常的</p><p>2004和2006都是正常的,2002没试过。</p><p>感谢分享。</p>

cag 发表于 2007-6-5 09:22:00

试了一下,如果是属性块,当双击属性时,还是会跳出属性修改对话框,其他倒正常

飞诗(fsxm) 发表于 2007-6-5 20:20:00

<p>可能这样说:</p><p>属性不是insert中的对象,它只是与insert放在一起的组合。对属性不能当作insert一起处理.</p><p>试试将属性也附上:<font color="#ff0000">(</font>Fsxm-Reactor-DoubleClick en&nbsp; ...<font color="#ff0000">)</font></p>

zag0666 发表于 2009-4-28 16:25:00

<p>感觉很近 可又遥不可及 </p><p>怎样才能双击编辑标注啊?</p>

zml84 发表于 2009-4-28 21:54:00

zml84说:fsxm <span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: tahoma; font-size: 16px; font-weight: normal; line-height: normal; ">是好人。</span>

liminnet 发表于 2009-5-4 14:06:00

liminnet 发表于 2009-5-4 14:07:00

liminnet 发表于 2009-5-4 14:08:00

页: [1] 2 3
查看完整版本: [求助]如何自定义双击反应器