- UID
- 11473
- 积分
- 260
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-10-14
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2013-4-17 20:29:29
|
显示全部楼层
Lisper 发表于 2013-4-17 19:54
问题提的太笼统!请举出具体实例,以便帮你分析!
[pcode=lisp,true];;;错误处理教程-1
(defun c:tt1 (/ varlst var_old var_new)
(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
(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq varlst '("osmode")
var_new '(0)
var_old (mapcar 'getvar varlst)
) ;_ 结束setq
(mapcar 'setvar varlst var_new)
(princ "\n按<Esc>强制退出, <空格>/<Enter>/<右键>错误...")
(rtos (getreal "\n请输入实数:"));出错后转到内部自定义的*error*函数
(mapcar 'setvar varlst var_old)
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
(princ)
) ;_ 结束defun
;;;错误处理教程-2
(defun c:tt2 (/ err inf varlst var_old var_new)
(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq err (vl-catch-all-apply
'(lambda ()
(setq varlst '("osmode")
var_new '(0)
var_old (mapcar 'getvar varlst)
) ;_ 结束setq
(mapcar 'setvar varlst var_new)
(princ "\n按<Esc>强制退出, <空格>/<Enter>/<右键>错误...")
(rtos (getreal "\n请输入实数:"))
) ;_ 结束lambda
) ;_ 结束vl-catch-all-apply
) ;_ 结束setq
(if (vl-catch-all-error-p err)
(progn ;|出错处理|;
(setq inf (strcase (vl-catch-all-error-message err) t)) ;将出错信息转换为小写字符串
(cond ((wcmatch inf "*break,*cancel*,*exit*,*取消*") ;|按了<Esc>键出错处理|;
(princ "\n用户按了<Esc>强制退出\n")
(mapcar 'setvar varlst var_old)
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
)
(t ;|其余错误处理|;
(princ (strcat "\n" inf))
(mapcar 'setvar varlst var_old)
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
)
) ;_ 结束cond
(princ)
) ;_ 结束progn
(progn ;|程序正常运行完毕的处理|;
(princ "\n")
(mapcar 'setvar varlst var_old)
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
(princ)
) ;_ 结束progn
) ;_ 结束if
) ;_ 结束defun[/pcode]
在上面两个出错处理函数教程中,vl-catch-all-apply方法之后按<Esc>强制退出与<空格>/<Enter>/<右键>都是一同退出,我想加一个判断,如果是按<Esc>就强制退出,按<空格>/<Enter>/<右键>就执行其它代码而不退出,关键是vl-catch-all-apply方法之后如何判断是esc还是回车? |
评分
-
查看全部评分
|