找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1076|回复: 1

[测试]:请教高手:对话框运行中,错误处理函数无法“UNDO”

[复制链接]
发表于 2006-12-13 17:54:57 | 显示全部楼层 |阅读模式

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

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

×
如何解决对话框运行过程中出错,错误处理函数无法"undo"的问题?
[PHP]
;|错误处理函数测试
在对话框状态下,如果出现错误,在程序调用错误处理函数时,遇到"undo"命令会出现CAD锁死现象!
以下是测试程序,运行前请保存好您的CAD文档,以免CAD锁死无法保存。

请教高手:在错误处理函数中如何判断当前运行的函数是在对话框模式还是命令行模式?
          如何解决对话框运行过程中出错,错误处理函数无法"undo"的问题?
|;
(defun c:test (/ AA DCL_ID DEFAULT FF MSG ODCMD ODERR TEST:ERROR TITLE TMPFN VAL TEST:begin TEST:end)
  ;;错误处理函数
  (defun TEST:error (msg)
    (if (/= msg "函数已取消")
      (princ (strcat "\n错误: " msg))
      (princ "\n*取消*")
    )
    ;;将以下两行屏蔽,CAD不会锁死,但是不能恢复函数运行前的状态。
    (TEST:end)
    (command "._undo" "1")
    (princ)
  )

  ;;初始化处理
  (defun TEST:begin ()           
    (setq odcmd (getvar "cmdecho"))
    (command "._undo" "_be")
    (setq oderr *error*)
    (setq *error* TEST:error)
    (princ)
  )

  ;;程序结束,恢复程序开始前的设置。
  (defun TEST:end ()
    (setvar "cmdecho" odcmd)
    (if oderr (setq *error* oderr))
    (command "._undo" "_e")
    (princ)
  )

  ;;主程序
  (vl-load-com)
  (TEST:begin)
  
  (command "._line" '(0 0 0) '(100 100 0) "")                ;;画一条线,检查是否能够UNDO
  (setq title    "test"
        msg      "测试一下哈!"
        default  "123456"
  )
  (setq tmpfn (vl-filename-mktemp "input.DCL"))        ;;生成临时文件
  ;;写临时文件的内容
  (setq FF (open tmpfn "w"))
  (write-line "input : dialog {" FF)
  (write-line "    label = \"标题\";" FF)
  (write-line "    key = \"title\";" FF)
  (write-line "    : text {" FF)
  (write-line "        label = \"123456\";" FF)
  (write-line "        key = \"message\";" FF)
  (write-line "    }" FF)
  (write-line "    : edit_box {" FF)
  (write-line "        key = \"input\";" FF)
  (write-line "        edit_width = 50;" FF)
  (write-line "    }" FF)
  (write-line "    ok_cancel_help;" FF)
  (write-line "}" FF)
  (close FF)

  ;;显示对话框
  (if (findfile tmpfn)
    (progn
      (setq dcl_id (load_dialog tmpfn))
      (if (not (new_dialog "input" dcl_id)) (done_dialog))
      (set_tile "title" title)
      (set_tile "message" msg)
      (set_tile "input" default)
      (mode_tile "input" 2)
      (action_tile "cancel" "(setq val default) (done_dialog)")
      ;;(setq aa (/ 60 0))有错误,除数为0
      (action_tile "accept" "(setq val (get_tile \"input\"))
                                   (setq aa (/ 60 0))               
                             (done_dialog)"
      )
      (start_dialog)
      (unload_dialog dcl_id)
    );;progn
    (progn
      (princ "\n没有找到对话框文件!\n")
      (exit)
      (princ)
    );;progn
  );;if
  (if (findfile tmpfn) (vl-file-delete tmpfn))  ;;删除临时文件
  (TEST:end)
  (princ "\n测试完毕!")
);;defun
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 244个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 02:14 , Processed in 0.165790 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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