明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: caoyin

[原创] 出错处理的点滴经验

  [复制链接]
发表于 2008-12-5 09:55 | 显示全部楼层

拿好笔记本,搬个板凳,学习~~~~~

发表于 2008-12-8 17:00 | 显示全部楼层
本帖最后由 作者 于 2008-12-8 17:02:54 编辑

 (lt:error-init (list '("cmdecho"
  0
  "cecolor"
  "1")
  ;;初始时设置的变量
                        0                            ;;
                        '(if e (redraw e 4))         ;;如果出错,取消亮显
                  )
   )
   (princ
  "\n测试开始!!")
   (initget
  1)
   (setq p1 (getpoint
  "\n点1: "))
   (initget
  1)
   (setq p2 (getpoint p1 "\n点2: "))
   (lt:sysvar-set '("osmode"
  0))

这一句(lt:sysvar-set '("osmode" 0))中的'("osmode" 0))
可以设置在

 (lt:error-init (list '("cmdecho"
  0
  "cecolor"
  "1"  "osmode" 0)
  ;;初始时设置的变量
                        0                            ;;
                        '(if e (redraw e 4))         ;;如果出错,取消亮显
                  )
   )
这一句吗?

 楼主| 发表于 2008-12-8 17:08 | 显示全部楼层
哪一句啊?
发表于 2008-12-8 17:12 | 显示全部楼层

(lt:error-init (list '("cmdecho"
  0
  "cecolor"
  "1")
  ;;初始时设置的变量
                        0                            ;;
                        '(if e (redraw e 4))         ;;如果出错,取消亮显
                  )
   )
   (princ
  "\n测试开始!!")
   (initget
  1)
   (setq p1 (getpoint
  "\n点1: "))
   (initget
  1)
   (setq p2 (getpoint p1 "\n点2: "))
   (lt:sysvar-set '("osmode"
  0))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

这一句(lt:sysvar-set '("osmode" 0))中的'("osmode" 0))
可以设置在这一句中去吗?

**************************************

 (lt:error-init (list '("cmdecho"
  0
  "cecolor"
  "1"  "osmode" 0)
  ;;初始时设置的变量
                        0                            ;;
                        '(if e (redraw e 4))         ;;如果出错,取消亮显
                  )
   )
**********

还有为什么要用(lt:sysvar-set '("osmode" 0))这一句呀,不用不行吗

发表于 2008-12-8 17:18 | 显示全部楼层

;;  [功能] 出错处理初始化
;;  [参数] lst---表(元素1 元素2 元素3)
;;               元素1:  包含系统变量及其值的列表
;;               元素2:  nil--->不操作
;;                       0----->放置 UNDO 的 BEGIN 和 END 标志
;;                       1或T-->放置 UNDO 的 BEGIN 和 END 标志,但出错时 UNDO 回操作前状态
;;               元素3:  出错时执行的特殊操作

还有你上面的元素1和3如果没变量要设置或没有出错执行的东东时,值是不是都是nilak 呀

 楼主| 发表于 2008-12-9 08:55 | 显示全部楼层

是的

(lt-error-init '(nil 1 nil))

(lt-error-init '(("osmode" 0)))

(lt-error-init '(nil nil '(redraw)))

发表于 2008-12-9 09:15 | 显示全部楼层
  中途设置的变量为了确保能够在出错后恢复,可以使用 lt:sysvar-set 函数,

           后面我们再详细说明

r刚看到啦,谢谢 caoyin版主,我有一个想法你看一下你的的程序可以实现吗?

就是主程序中我定义啦

(defun errormsg (definmsg)
(setq $ko-errormsg$ '(if (= msg "函数被取消") (setq msg "鬼谷子温馨提示:你用Esc键中止了程序!!!") (setq msg defin)))
)

(defun c:qqqq ()
 (ls:error-init (list nil nil nil))
 (errormsg "你的程序在程序TT中出错啦,请查询程序TT的代码")
 (明经);故意在这一步让程序出错,以调式,是不是显示“你的程序在程序TT中出错啦,请查询程序TT的代码”这一行字
 (lt:error-restore)
)

caoyin版主,为什么上面的不会显示“你的程序在程序TT中出错啦,请查询程序TT的代码”这一行字呀??

 楼主| 发表于 2008-12-9 09:34 | 显示全部楼层

(setq *error1* *error*)
(defun *error* (definmsg)
  (princ "鬼谷子温馨提示:你用Esc键中止了程序!!!")
)

(defun c:qqqq ()
 (ls:error-init (list nil nil nil))
 (明经)
 (lt:error-restore)
)

发表于 2008-12-9 09:57 | 显示全部楼层
本帖最后由 作者 于 2008-12-9 9:58:27 编辑

不是这个意思啦,老大,我的本意是想如果是用户用ESC来退程序的话就显示("鬼谷子温馨提示:你用Esc键中止了程序!!!"),在而进入那个主程序或通用函数的时候如果程序出错就显示("你的程序在某某程序或函数调用时中出错,请查询某某程序或函数段的代码")

所以我想通过用户定义全局变量 $lt:-errormsg$ 而改变默认出错信息:$lt:-errormsg$这个全局变量不是可以改变错误信息的吗?

发表于 2008-12-11 13:38 | 显示全部楼层

严重学习一下

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 14:02 , Processed in 0.445737 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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