本帖最后由 作者 于 2009-4-9 13:25:33 编辑
;;如何消除双击时的多次响应问题 ;;前面是反应器的程序段,问题在最后 (defun newdcr(/) (vl-load-com) (if (member "acdblclkedit.arx" (arx)) (arxunload "acdblclkedit.arx" nil) ) (setq dcr (VLR-Mouse-Reactor nil '((:VLR-beginDoubleClick . stdcr))) ) (vlr-add dcr) (princ) ) (defun stdcr ( ro po / obj ) (setq obj (car (nentselp (car po)))) (ttfun obj) (princ) )
(defun ttfun( ent / a b ) (setq a (entget ent)) (setq b (cdr (assoc 0 a))) (if (= b "TEXT") (princ (cdr (assoc 1 a))) (princ "\n不是文字\n")) (princ) ) (newdcr) ;;以上程序段是一个测试用小程序,双击文字时,输出文本内容,非文字时报错。 ;;acadr2004下运行 ;| 以下是返回结果 <图元名: 7ef5a5c8><图元名: 7ef5a5c8><图元名: 7ef5a5c8><图元名: 7ef5a5c8><图元名: 7ef5a5c8><图元名: 7ef5a5c8><图元名: 7ef5a5c8><图元名: 7ef5a5c8>abcd<图元名: 7ef5a5c8>abcdabcd |; ;;其中图元名先出现了7次,第8次出现时执行了一次ttfun子函数,然后图元名又出现了,同时执行了一次ttfun,最后又返回了一次或几次ttfun的执行结果 ;| 现在就有几个问题了 1。为什么会出现多次图元名,如何不让它出现---一次也不出现 2。为什么会多次出现ttfun的执行结果,这样的情况是不是可以理解成ttfun运行了多次,也就是一次双击操作,由于系统响应的原因,反应器作出了多次响应。 3。如果是多次响应的原因,那什么不是一次图元名一次运行结果这样间隔的出现。 4。程序运行最后,命令栏并没有回到"command : "这样的状态,需要按一次"ESC"。但是这并不影响直接运行命令。 求助:如何让反应器只响应一次,最好不出现额外的信息输出? |; |