找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 924|回复: 12

[求助] [求助]:关于程序中途取消的问题!

[复制链接]
发表于 2004-8-12 20:22:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一个lisp程序在执行过程中突然有"esc"键中断,即取消函数!! 问此时如何才能使已定义的变量,如:("osmode" 0)  等恢复到(setq oldsnap (getvar "osmode"))  的oldsnap 呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-12 20:28:41 | 显示全部楼层
定义出错函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-12 21:19:28 | 显示全部楼层
能否说得更明白点啊? 身边没有会lisp的人,简单的问题只好请教各位了!:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-8-12 21:35:47 | 显示全部楼层
最初由 xgwl 发布
[B]能否说得更明白点啊? 身边没有会lisp的人,简单的问题只好请教各位了!:) [/B]

简单的参考这个,关于程序开始与结束我很早贴过一个,再深入的话可以看看ET中定义部分。

  1. (defun c:test (/ myerror)
  2.   ;;定义出错函数
  3.   (defun myerror (msg)
  4.     (princ "\n*取消!*")
  5.     (setvar "osmode" oldos);恢复捕捉
  6.     (princ)
  7.   )
  8.   ;;主程序部分
  9.   (setq        olderr        *error* ;保存旧的
  10.         *error*        myerror ;设置新的
  11.   )
  12.   (setq oldos (getvar "osmode"));保存程序开始前的状态
  13.   ;;其他代码
  14.   ......
  15.   ;;结束部分
  16.   (setq *error* olderr);正常结束程序时恢复默认
  17.   (setvar "osmode" oldos)
  18.   (princ)       
  19. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-12 23:26:39 | 显示全部楼层
注意对出错函数的调用其实更象是变量赋值的形式,(setq        olderr        *error*         *error* myerror )
而与常规的自定义函数调用是有区别的。另外,在定义出错函数时,(defun myerror (msg)中的msg一定要有,当然其在出错函数内部用不用没有关系,在调用时也不需要将其当作形参来处理。msg的值就是出错时*error*返回的错误说明。不同的出错,返回值是不一样的,如按esc取消时中文版中返回“函数被取消"。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-13 01:07:28 | 显示全部楼层
也可以考虑反应器
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-16 10:19:25 | 显示全部楼层
关注一下,我也一直弄不明白出错函数(*error*)的用法,还请多多指教!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11310个

财富等级: 富甲天下

发表于 2004-8-17 16:47:17 | 显示全部楼层
出错函数是一种错误陷阱函数,当程序出错时就执行。
如果将*error*设为nil,则没有错误函数。
错误函数也可以直接定义。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-17 21:04:25 | 显示全部楼层
我不用出错函数,中断操作后也出现"函数被取消"的字样啊, 我的意思是一个能恢复到之前的状态,还有就象正cad命令一样,取消就取消了,不要什么"函数被取消"的字样!
另外eachy  斑竹示范的,我也没搞出来,呵呵,现在还是幼儿园阶段! 要是有个完整的程序看看就好了!短点的!:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-17 23:24:37 | 显示全部楼层
eachy斑竹的代码应该是比较完整的了呀。如果要让程序不出现“函数被取消”提示,只需用msg的值重新定义即可,例如:
引用一下eachy斑竹的代码,稍加改了一下,你可以交互用两点法画10个圆,中途你可以按esc试试退出时的提示。注意观察状态条上捕捉显示在程序正常情况下及按ESC非正常情况下
的变化情况。
(defun c:test (/ myerror)
  ;;定义出错函数
  (defun myerror (msg)
    (if (= msg "函数被取消")
    (princ "\n你按了Esc键")
      )
    (setvar "osmode" oldos);恢复捕捉
   (setq *error* olderr) ;恢复原来的出错函数
    (princ)
  )
  ;;主程序部分
  (setq        olderr        *error* ;保存旧的
        *error*        myerror ;设置新的
  )
  (setq oldos (getvar "osmode"));保存程序开始前的态
  (setvar "OSMODE" 32)
  ;;其他代码
(repeat 10
   (command "circle" "2p" pause pause)
   )
  ;;结束部分
  (setq *error* olderr);正常结束程序时恢复默认
  (setvar "osmode" oldos)
  (princ)       
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-17 23:56:56 | 显示全部楼层
谢谢啦! 一个人光看书,从零开始学lisp,真的好难!周围又没有一个人会lisp的! 还好有大家帮忙!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-18 09:59:53 | 显示全部楼层
MSG是不是一个特殊的变量,*error*在VISP编辑器中显示为黑色是为什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-26 23:22:09 | 显示全部楼层
看了楼上的,我明白了,多谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 19:27 , Processed in 0.187865 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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