明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8885|回复: 8

[已解决]是否有办法实现pasteclip(cltr+v)时,点击右键退出命令

[复制链接]
发表于 2008-7-24 09:05:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-7-24 14:33:55 编辑

pasteclip时右键会提示"需要点或选项关键字",能否改造成不提示,而直接退出

虽然用(getpoint)可以实现,但失去了预览插入图块的功能,有没有更好的办法?

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-7-24 11:05:00 | 显示全部楼层

(defun hero_douc1 (e m)
  ;(princ m)
  (vla-eval (vlax-get-acad-object)  "sendkeys \"{ESC}\"")
 
)


(defun c:test ( / kbapp hh ext txt lst txtsty)

  (if (= nil *Hero_mouseReactor1*)
    (setq *Hero_mouseReactor1*
    (vlr-mouse-reactor
      nil
      '((:vlr-BeginrightClick . Hero_Douc1))
    )
    )
  )
  (vl-cmdf "pasteclip" pause)
  ;(alert "ok")
  (princ)
)

这样试试。用了反应器。

发表于 2008-7-24 11:25:00 | 显示全部楼层
[CODE][/CODE](defun c:test (/ myerr olderr osm ort)
  (defun hero_douc1 (e m)
    (vla-eval (vlax-get-acad-object) "sendkeys \"{ESC}\"")
  )
;;;****************************************************
  ;;程序功能:
  ;;作者:英雄无敌
  ;;QQ:280212043
  ;;Email:280212043
  (defun myerr (msg)
    ;;************************************************
    ;;在这里写入错误处理函数
    (setq *error* olderr)
    (princ msg)
    (vlr-remove *Hero_mouseReactor1*)
    (setq *Hero_mouseReactor1* nil)
    (princ)

  )
  (setq olderr *error*)
  (setq *error* myerr)
;;;****************************************************
  ;;在这里写入正常工作的函数
  (if (= nil *Hero_mouseReactor1*)
    (setq *Hero_mouseReactor1*
    (vlr-mouse-reactor
      nil
      '((:vlr-BeginrightClick . Hero_Douc1))
    )
    )
  )
  (vl-cmdf "pasteclip" pause)
     ;(alert "ok")
  (vlr-remove *Hero_mouseReactor1*)
  (setq *Hero_mouseReactor1* nil)
;;;****************************************************
  (setq *error* olderr)
  (princ)
)
这样可能比较适用
 楼主| 发表于 2008-7-24 14:33:00 | 显示全部楼层
本帖最后由 作者 于 2008-7-24 14:42:07 编辑

测试成功,很好的办法,多谢!

 不过,(vla-eval (vlax-get-acad-object) "sendkeys \"{ESC}\"")有时会失灵

发表于 2008-7-24 15:21:00 | 显示全部楼层

如果失灵的话,在后面再加一句,(vla-eval (vlax-get-acad-object) "DoEvents")也许能解决。

 楼主| 发表于 2008-7-25 09:11:00 | 显示全部楼层

失效的问题解决了,多谢英雄无敌!

再请教一下,第一次执行(VLA-EVAL obj "sendkeys \"{ESC}\"")

显示"正在初始化 VBA 系统..",速度非常慢,可否在加载程序时初始化VBA,而非运行程序时.

发表于 2008-7-25 11:37:00 | 显示全部楼层

你可以在程序的开头写上一句(vla-eval (vlax-get-acad-object) "DoEvents"),放到最前,不要放到定义的程序里面。

 楼主| 发表于 2008-7-25 14:16:00 | 显示全部楼层

可以了,再次感谢

发表于 2012-8-9 10:03:55 | 显示全部楼层
英雄无敌 发表于 2008-7-25 11:37
你可以在程序的开头写上一句(vla-eval (vlax-get-acad-object) "DoEvents"),放到最前,不要放到定义的程序 ...

(vl-load-com)
(vla-eval (vlax-get-acad-object) "DoEvents")
程序最开头放了这两句,下面的程序出问题了
(defun c:wd ()
  (vl-load-com)
  (vla-eval (vlax-get-acad-object) "Sendkeys \"close\"")
  (vla-eval (vlax-get-acad-object) "Sendkeys \"{ENTER}\"")
)
输入WD后屏蔽上显示close(我打开了DYN),然后CAD就卡住了,
如果把(vla-eval (vlax-get-acad-object) "DoEvents")写在程序中,运行程序时会出现“初始化VBA”这样的字样,此时也是卡顿,不过过一会儿就能运行,放在最开头的话CAD就不运行了,请教如何解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-8 04:06 , Processed in 0.160384 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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