redcat 发表于 2011-3-13 12:50:28

AutoCAD动态研究

本帖最后由 redcat 于 2011-11-17 21:39 编辑

;;;AutoCAD动态研究
(defun c:test (/ gr code data)
(defun *error* (inf)
    (setq inf (strcase inf t)) ;将出错信息转换为小写字符串
    (cond
      ((wcmatch inf "*break*,*cancel*,*exit*,*取消*,*中断*") ;|按了<Esc>键出错处理|;
       (princ "\n用户按了<Esc>强制退出\n")
;;;       (mapcar 'setvar varlst var_old);还原系统变量
      )
      (t ;|其余错误处理|;
       (princ (strcat "\n" inf))
;;;       (mapcar 'setvar varlst var_old);还原系统变量
      )
    ) ;_ 结束cond
    (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
    (princ)
) ;_ 结束defun

(while (progn
   (setq gr   (grread t 15 0)
code (car gr)
data (cadr gr)
   ) ;_ 结束setq
   (cond
   ((= code 2) ;键盘区域
      (princ "\n您按了键盘区域:")
      (princ (vl-list->string(cdr gr)))
   )
   ((= code 3) ;鼠标左击
      (princ "\n鼠标左击点为:")
      (princ data)
   )
   ((= code 5) ;鼠标移动
      (princ "\n鼠标移动到:")
      (princ data)
   )
   ((or(= code 11) ;(getvar"SHORTCUTMENU")=0时,鼠标右击
          (= code 25)) ;(getvar"SHORTCUTMENU")≠0时,鼠标右击
      (princ "\n您右击了鼠标:")
   )
   (t)
   ) ;_ 结束cond
   t
) ;_ 结束progn
) ;_ 结束while
) ;_ 结束defun




434939575 发表于 2022-6-1 22:31:55

请教下这个出错处理后面没有出现这个 *error* ,但是exit ....又打印出错的提示 ,不太明白出错处理。

yoyoho 发表于 2017-9-27 17:35:58

学习一下,感谢分享!

chuanyumin 发表于 2022-6-18 11:46:18

很好的东西

露水2 发表于 2011-3-13 22:01:53

动态是个好东西

461045462 发表于 2011-3-14 06:44:43

收藏下来,好好看看学习研究领会
谢谢楼主的分享

qjchen 发表于 2011-3-18 16:05:02

:)
有点奇怪的是,为什么
我必须是 11而非25才是右击鼠标呢
   ((= code 11) ;鼠标右击
      (princ "\n您右击了鼠标:")
   )

yoyoho 发表于 2011-3-18 17:19:28

感谢分享!
下载学习了!

它山之石 发表于 2011-3-21 09:18:36

回复 qjchen 的帖子

好象跟控制右键快捷菜单的这个系统变量有关 "SHORTCUTMENU"

redcat 发表于 2011-3-21 15:47:48

好象跟控制右键快捷菜单的这个系统变量有关 "SHORTCUTMENU"
我的机子上即使改为11
右击还是25

jxphklibin 发表于 2011-6-15 18:27:58

好东西,学习

yshf 发表于 2011-6-15 20:53:54

好东西

zark 发表于 2011-6-17 12:06:26

研究很深,学习了
页: [1] 2
查看完整版本: AutoCAD动态研究