linhui12 发表于 2008-6-15 20:17:00

<p><font color="#ff0000">搞了一整天都是点"保存"或"取消"后再运行"GETDATA"才能返回前一次输入的"P""D""N""R"值,请问如何实现点击"选择"或"继续选择"后显示的对话框中显示前一次输入的"P""D""N""R"值呢,请大家指教.谢谢</font></p><p>DCL文件:</p><p>getdata : dialog {<br/>&nbsp; label="提取多义线顶点坐标";<br/>&nbsp; : boxed_column {<br/>&nbsp;&nbsp; label="列表";<br/>&nbsp;&nbsp; : list_box {key="list1";width=20;height=20;}<br/>&nbsp;&nbsp; : column {<br/>&nbsp;&nbsp;&nbsp; : row {<br/>&nbsp;&nbsp;&nbsp;&nbsp; : edit_box {label="P:";key="P";edit_width=3;}<br/>&nbsp;&nbsp;&nbsp;&nbsp; : edit_box {label="D:";key="D";edit_width=6;}<br/>&nbsp;&nbsp;&nbsp;&nbsp; : row {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : edit_box {label="N:";key="N";edit_width=3;} <br/>&nbsp;&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp;&nbsp; : edit_box {label="R:";key="R";edit_width=6;}<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp; }<br/>&nbsp; }<br/>&nbsp; :row {<br/>&nbsp;&nbsp; :retirement_button {label="选择..";key="xz";}<br/>&nbsp;&nbsp; :retirement_button {label="继续选择..";key="jxxz";}<br/>&nbsp;&nbsp; :retirement_button {label="保存..";key="accept";is_default=true;}<br/>&nbsp;&nbsp; :button{label="取消";key="cancel";is_cancel=true;}<br/>&nbsp; }<br/>}</p><p>LISP文件:</p><p>(defun setdialog ()<br/>&nbsp; (set_tile "P" (if p (itoa p) "1"))<br/>&nbsp; (set_tile "D" (if D (rtos D 2) "508"))<br/>&nbsp; (set_tile "N" (if N1 (itoa N1) "4"))<br/>&nbsp; (set_tile "R" (if R1 (rtos R1 2) "500"))<br/>&nbsp; (mode_tile "jxxz" 1)<br/>&nbsp; (mode_tile "bcsj" 1)<br/>)<br/>(defun GETVALOFDIA ()<br/>&nbsp; (setq p (read (get_tile "P"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d (read (get_tile "D"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n1 (read (get_tile "N"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r1 (read (get_tile "R")))<br/>)<br/>(defun showbutton ()<br/>&nbsp; (mode_tile "jxxz" 0)<br/>&nbsp; (mode_tile "bcsj" 0)<br/>)<br/>(defun showlist (/ i lst)<br/>&nbsp; (setq i 0)<br/>&nbsp; (start_list "list1")<br/>&nbsp; (repeat (length lbl)<br/>&nbsp;&nbsp; (setq lst (nth i lbl))<br/>&nbsp;&nbsp; (add_list (car lst))<br/>&nbsp;&nbsp; (MAPCAR (quote ADD_LIST) (cadr lst))<br/>&nbsp;&nbsp; (setq i (1+ i))<br/>&nbsp; )<br/>&nbsp; (end_list)<br/>)<br/>(DEFUN C:getdata ( <br/>;/ P D SST H fi N1 I J K NAME DXF TYPE_LINE XY_COUNT F x y PT1 R1<br/>)<br/>&nbsp; (setq lbl (list) re 5)<br/>&nbsp; (IF (&gt; (SETQ DCL_ID (LOAD_DIALOG "getdata")) 0) (progn<br/>&nbsp;&nbsp; (while (&gt; re 1)<br/>&nbsp;&nbsp;&nbsp; (IF (NEW_DIALOG "getdata" DCL_ID "") (PROGN<br/>&nbsp;&nbsp;&nbsp;&nbsp; (if (= (length lbl) 0) (setdialog) (showlist))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "xz" "(showbutton)(getvalofdia)(done_dialog 2)")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "jxxz" "(getvalofdia)(done_dialog 3)")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "accept"&nbsp; "(GETVALOFDIA) (DONE_DIALOG 1)")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "cancel" "(DONE_DIALOG 0)")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (SETQ RE (START_DIALOG))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (if (or (= RE 2) (= RE 3)) (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= re 2) (setq lbl (list)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PROMPT " \n选多义线:")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (SETQ SST (SSGET '((0 . "*POLYLINE")))) (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ J 0 te (list))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (REPEAT (SSLENGTH SST)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ta (list (strcat (itoa p) "," (rtos D 2 3) "," (rtos R1 2 3) "," (itoa N1))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ NAME (SSNAME SST J))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ J (1+ J))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ DXF (ENTGET NAME))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ TYPE_LINE (CDR (ASSOC 0 DXF)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ XY_COUNT (EVAL (READ (STRCAT "(" TYPE_LINE " DXF NAME)"))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq k 0 tl (list))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat (length xy_count)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq y (nth k xy_count))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq h (caddr y))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq x (cadr y))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq y (car y))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq tl (cons (strcat (rtos y 2 3) "," (rtos x 2 3) "," (rtos h 2 3)) tl))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq k (1+ k))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq te (append te (list (append ta (list (reverse tl))))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p (1+ p))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lbl (append lbl te))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br/>&nbsp;&nbsp;&nbsp;&nbsp; ))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; (ALERT "Unable to display dialog box!\n无法显示对话框!")<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (UNLOAD_DIALOG DCL_ID)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (ALERT "Unable to open dialog box!\n无法装载对话框!")<br/>&nbsp; )<br/>&nbsp; (if (= RE 1) (progn<br/>&nbsp;&nbsp; (setq fn (if fn fn ""))<br/>&nbsp;&nbsp; (setq fn (if fn fn "") fn (getfiled "写出文件" fn "Txt" 1))<br/>&nbsp;&nbsp; (setq f (open fn "w"))<br/>&nbsp;&nbsp; (setq i 0)<br/>&nbsp;&nbsp; (repeat (length lbl)<br/>&nbsp;&nbsp;&nbsp; (setq lcl (nth i lbl) i (1+ i))<br/>&nbsp;&nbsp;&nbsp; (princ (car lcl) f)<br/>&nbsp;&nbsp;&nbsp; (princ "," f)<br/>&nbsp;&nbsp;&nbsp; (setq ldl (cadr lcl) j 0)<br/>&nbsp;&nbsp;&nbsp; (repeat (length ldl)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (princ (if (= j 0) "" ",") f)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (princ (nth j ldl) f)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq j (1+ j))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (princ "\n" f)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (close f)<br/>&nbsp; ))<br/>&nbsp; (princ)<br/>)<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(defun POLYLINE (DXF E1 / XY E2 count_xy pd)<br/>&nbsp; (setq count_xy nil)<br/>&nbsp; (SETQ DXF (MEMBER (ASSOC 330 DXF) DXF))<br/>&nbsp; (SETQ E2 (ENTNEXT E1))<br/>&nbsp; (SETQ DXF (ENTGET E2))<br/>&nbsp; (setq e1 (cdr (assoc 0 dxf)))<br/>&nbsp; (while (= e1 "VERTEX")<br/>&nbsp;&nbsp; (setq e1 (cdr (assoc 10 dxf)))<br/>&nbsp;&nbsp; (setq pd (cdr (assoc 70 dxf)))<br/>&nbsp;&nbsp; (if (/= pd 16) (setq count_xy (cons e1 count_xy)))<br/>&nbsp;&nbsp; (setq e1 e2)<br/>&nbsp;&nbsp; (SETQ E2 (ENTNEXT E1))<br/>&nbsp;&nbsp; (SETQ DXF (ENTGET E2))<br/>&nbsp;&nbsp; (setq e1 (cdr (assoc 0 dxf)))<br/>&nbsp; )<br/>&nbsp; (setq COUNT_XY (reverse count_xy))<br/>)<br/></p>

ZZXXQQ 发表于 2008-6-15 23:41:00

这样试试:

(defun setdialog ()
(set_tile "P" (if p (itoa p) "1"))
(set_tile "D" (if D (rtos D 2) "508"))
(set_tile "N" (if N1 (itoa N1) "4"))
(set_tile "R" (if R1 (rtos R1 2) "500"))
(mode_tile "jxxz" 1)
(mode_tile "bcsj" 1)
)
(defun GETVALOFDIA ()
(setq p (read (get_tile "P"))
      d (read (get_tile "D"))
      n1 (read (get_tile "N"))
      r1 (read (get_tile "R")))
)
(defun showbutton ()
(mode_tile "jxxz" 0)
(mode_tile "bcsj" 0)
)
(defun showlist (/ i lst)
(setq i 0)
(start_list "list1")
(repeat (length lbl)
   (setq lst (nth i lbl))
   (add_list (car lst))
   (MAPCAR (quote ADD_LIST) (cadr lst))
   (setq i (1+ i))
)
(end_list)
(set_tile "P" (if p (itoa p) "1"))
(set_tile "D" (if D (rtos D 2) "508"))
(set_tile "N" (if N1 (itoa N1) "4"))
(set_tile "R" (if R1 (rtos R1 2) "500"))
)
(DEFUN C:getdata (
;/ P D SST H fi N1 I J K NAME DXF TYPE_LINE XY_COUNT F x y PT1 R1
)
(setq lbl (list) re 5)
(IF (> (SETQ DCL_ID (LOAD_DIALOG "getdata1")) 0) (progn
   (while (> re 1)
    (IF (NEW_DIALOG "getdata" DCL_ID "") (PROGN
   (if (= (length lbl) 0) (setdialog) (showlist))
   (action_tile "xz" "(showbutton)(getvalofdia)(done_dialog 2)")
   (action_tile "jxxz" "(getvalofdia)(done_dialog 3)")
   (action_tile "accept""(GETVALOFDIA) (DONE_DIALOG 1)")
   (action_tile "cancel" "(DONE_DIALOG 0)")
   (SETQ RE (START_DIALOG))
   (if (or (= RE 2) (= RE 3)) (progn
      (if (= re 2) (setq lbl (list)))
      (PROMPT " \n选多义线:")
      (if (SETQ SST (SSGET '((0 . "*POLYLINE")))) (progn
       (SETQ J 0 te (list))
       (REPEAT (SSLENGTH SST)
      (setq ta (list (strcat (itoa p) "," (rtos D 2 3) "," (rtos R1 2 3) "," (itoa N1))))
      (SETQ NAME (SSNAME SST J))
      (SETQ J (1+ J))
      (SETQ DXF (ENTGET NAME))
      (SETQ TYPE_LINE (CDR (ASSOC 0 DXF)))
      (SETQ XY_COUNT (EVAL (READ (STRCAT "(" TYPE_LINE " DXF NAME)"))))
      (setq k 0 tl (list))
      (repeat (length xy_count)
         (setq y (nth k xy_count))
         (setq h (caddr y))
         (setq x (cadr y))
         (setq y (car y))
         (setq tl (cons (strcat (rtos y 2 3) "," (rtos x 2 3) "," (rtos h 2 3)) tl))
         (setq k (1+ k))
      )
      (setq te (append te (list (append ta (list (reverse tl))))))
      (setq p (1+ p))
       )
       (setq lbl (append lbl te))
      ))
   ))
    )
   (ALERT "Unable to display dialog box!\n无法显示对话框!")
    )
   )
    (UNLOAD_DIALOG DCL_ID)
   )
   (ALERT "Unable to open dialog box!\n无法装载对话框!")
)
(if (= RE 1) (progn
   (setq fn (if fn fn ""))
   (setq fn (if fn fn "") fn (getfiled "写出文件" fn "Txt" 1))
   (setq f (open fn "w"))
   (setq i 0)
   (repeat (length lbl)
    (setq lcl (nth i lbl) i (1+ i))
    (princ (car lcl) f)
    (princ "," f)
    (setq ldl (cadr lcl) j 0)
    (repeat (length ldl)
   (princ (if (= j 0) "" ",") f)
   (princ (nth j ldl) f)
   (setq j (1+ j))
    )
    (princ "\n" f)
   )
   (close f)
))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun POLYLINE (DXF E1 / XY E2 count_xy pd)
(setq count_xy nil)
(SETQ DXF (MEMBER (ASSOC 330 DXF) DXF))
(SETQ E2 (ENTNEXT E1))
(SETQ DXF (ENTGET E2))
(setq e1 (cdr (assoc 0 dxf)))
(while (= e1 "VERTEX")
   (setq e1 (cdr (assoc 10 dxf)))
   (setq pd (cdr (assoc 70 dxf)))
   (if (/= pd 16) (setq count_xy (cons e1 count_xy)))
   (setq e1 e2)
   (SETQ E2 (ENTNEXT E1))
   (SETQ DXF (ENTGET E2))
   (setq e1 (cdr (assoc 0 dxf)))
)
(setq COUNT_XY (reverse count_xy))
)

linhui12 发表于 2008-6-16 01:35:00

<font color="#ff0000"><p>感谢<strong><font face="Verdana" color="#da2549">ZZXXQQ</font></strong>斑竹,发现程序有点小问题:</p><p>初次选完多段线后二次再点"选择"是将新选数据替换前面数据(即将前面数据清空后再输入新选数据,"<font color="#ff0000">P"=1</font>)</p><p>目前"P"&nbsp;是累计前面数据的.(只要求"继续选择"时将累计前面数据)</p><p>请您查查原因.</p></font>

ZZXXQQ 发表于 2008-6-16 20:21:00

当点[选择]时程序已经将表lbl清空了。不知道为什么是累计数据。

linhui12 发表于 2008-6-16 20:39:00

<strong><font face="Verdana" color="#da2549">ZZXXQQ</font></strong>可否帮忙调试一下该程序,查查"当点[选择]时程序已经将表lbl清空"时为何"P"值还会累加,这是什么原因引起的呢???

linhui12 发表于 2008-6-17 15:02:00

<p>嘎嘎.....</p><p>自己解决了.将表lbl清空时顺便对"P"赋值为1就OK了.</p>

sicky111 发表于 2013-4-28 03:07:06

把CAD关了再重启,输入框的数值还在吗?
页: 1 [2]
查看完整版本: [讨论]让对话框显示上次输入值--OKl了谢谢各位的关注与帮助