DCL对话框嵌套之后,为何不能执行下一个对话框的程序?
<p></p><p>我想把几个小程序综合在一个对话框里,也就是用DCL对话框嵌套,可是嵌套之后,点击嵌套的内容之后,下一个对话框也会出现,点击OK后,CAD就死机了! 要么就是提示参数错误等等,可是如果我把这些小程序单独分开加载的话,可以顺利地执行,参数设置应该是没问题的啊究竟错在哪里了呢?</p><p>请高手帮小弟看看,顺便指导一下,先谢谢了!</p> 学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习 学习学习学习学习学习学习 好东西!学习了! <p>上传个图片作详细说明.点击第二个对话框的OK程序,CAD就不动弹了!</p><p>另外,有没有办法在打开第二个对话框后,先暂时关闭第一个对话框?如果不执行第二个对话框里的程序的话,点击"取消",第一个对话框又自动弹出? 请求高人指点,感激不尽!!!</p> 明经里这么多高手,指教一下嘛! 本帖最后由 作者 于 2008-11-20 23:27:01 编辑下面是改过的程序。不过只是在前一个对话框上打开了第二个对话框,未关闭前一个对话框。
(defun c:dia8a()
(setvar "cmdecho" 0)
(dcl_dia8a)
(prin1)
)
(defun dcl_dia8a()
(if (> (setq dcl_id (load_dialog "dia8a")) 0) (progn
(setq dd 3)
(while (> dd 1)
(if (new_dialog "dia8a" dcl_id) (progn
(sub_rb1)
(set_tile "rb1" "1")
(set_tile "kww" "100")
(set_tile "khh" "100")
(action_tile "rb1" "(sub_rb1)")
(action_tile "rb2" "(sub_rb2)")
(action_tile "rb3" "(done_dialog 2)")
(action_tile "rb4" "(sub_rb4)")
(action_tile "accept" "(ok_dia8a)(done_dialog 1)")
(setq dd (start_dialog))
)
(ALERT "Unable to display dialog box!")
)
(if (= dd 2) (sub_rb3))
)
(UNLOAD_DIALOG DCL_ID)
)
(ALERT "Unable to load dialog box!")
)
(if (= dd 1) (draw_dia8a))
)
(defun sub_rb1()
(setq ddtype 1)
(show_sld "kimage" "dia8a1")
)
(defun sub_rb2()
(setq ddtype 2)
(show_sld "kimage" "dia8a2")
)
(defun show_sld(key sld)
(setq x (dimx_tile key))
(setq y (dimy_tile key))
(start_image key)
(fill_image 0 0 x y -2)
(slide_image 0 0 x y sld)
(end_image)
)
(defun ok_dia8a()
(setq ww (atof (get_tile "kww")))
(setq hh (atof (get_tile "khh")))
)
(defun draw_dia8a()
(setq pt1 (getpoint "insert,please:"))
(setq pt2 (polar pt1 0 ww))
(setq pt3 (polar pt2 (/ pi 2) hh))
(setq pt4 (polar pt3 pi (* ww 0.5)))
(setq pt5 (polar pt4 (* pi 1.5) (* hh 0.5)))
(setq pt6 (polar pt5 pi (* ww 0.5)))
(cond
((= ddtype 1)(command "pline" pt1 pt2 pt3 pt4 pt5 pt6 "C"))
((= ddtype 2)(command "pline" pt6 pt1 pt2 pt3 pt4 "")
(command "circle" "2p" pt4 pt6))
)
)
;The type1 and type2;
(defun sub_rb3()
(setvar "cmdecho" 0)
(setq word_list'("平面图" "立面图""总经理室" "楼梯间"
"弹簧" "螺丝" "传真机" "翔虹信息"
"翔虹AutoCAD技术中心"
"AutoCAD 2000特训教材"
"道路" "桥梁" "捷运系统" "高速铁路"))
(dcl_dia7a)
(prin1)
)
(defun dcl_dia7a()
; (setq dcl_id (load_dialog "dia8a"))
(done_dialog)
(if (new_dialog "dia7a" dcl_id) (progn
(start_list "klist")
(mapcar 'add_list word_list)
(end_list)
(action_tile "klist" "(sub_klist $value)")
(action_tile "accept" "(ok_dia7a)(done_dialog 1)")
(setq de( start_dialog))
)
(ALERT "Unable to display dialog box!")
)
(if (= de 1) (progn
(setvar "cmdecho" 1)
(command "text" pause pause 0 wordstr)
(setvar "cmdecho" 0)
))
)
(defun sub_klist(vvs)
(set_tile "wordstr" (nth (atoi vvs) word_list))
)
(defun ok_dia7a()
(setq wordstr(get_tile "wordstr"))
)
謝謝版主!
<p>謝謝版主的解答!</p><p>我先才復制下來,回家再看看能不能再執行。</p><p>可是,現在我又發現了一個新的問題:我編寫了一個Lisp程序,運行也正常,可是,</p><p>我把它編成VLX文件時,它卻提示我的LISP中有錯,用LISP它卻很正常的呀?文件太常,我就不上傳了。</p><p>; (COMPILE-FILES st (D:/Ω秨祇/Standard/inblock.lsp))<br/><br/>.....<br/>; warning: run time evaluated expression: PATH<br/>; warning: run time evaluated expression: BLOCKNAME<br/>...<br/>; error: malformed list on input<br/>......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................<br/>; Compilation aborted: Fatal errors found.<br/></p> 这样好像还是不行啊,版主.还是死机,不知道是怎么回事,我能打开第二个对话框,可是点击OK时,它还是不动了! 4楼已改。 本帖最后由 作者 于 2008-11-20 0:02:31 编辑 <br /><br /> ZZXXQQ发表于2008-11-19 21:32:00static/image/common/back.gif4楼已改。<p>谢谢版主耐心地帮忙修改,非常感谢!我刚才下载了,并试了一下,运行成功,谢谢!</p><p>不过,有个问题我还是想请教版主一下:目前的情况是,我打开第二个对话框,</p><p>并确定要执行第二个对话框里的小程序,点击OK时,它并不直接回到模型空间中执行我要的程序,</p><p>而是又回到了第一个对话框,只有点击了第一个对话框中的OK时,它才回到模型空间中执行我要的程序,</p><p>问题是:我能不能省去这一步?也就是说,当我要执行第二个对话框中的程序时,,点OK后它直接回到模型空间中执行程序?如果我不想执行第二个程序中的程序,点击CANCEL时,它又回到第一个对话框?我是个LISP初学者,还望版主帮帮忙,小弟先在这里谢谢了!</p><p>补充一点:我只想执行一次执行一个小程序,可是现在好像两个对话框里的程序在同时执行啊,比喻说,第一个对话框中要执行的内容是画L型图块,第二个对话框中要执行的内容是写文字,可是,现在,我只想写文字,程序却文字也写了,后面接着出现执行L型图块程序呀,</p> 4楼已改。 版主,真是太感谢你了!谢谢你!明经里高手真是多,好人也多!!!!