明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: linhui12

[讨论]让对话框显示上次输入值--OKl了谢谢各位的关注与帮助

  [复制链接]
 楼主| 发表于 2008-6-15 20:17:00 | 显示全部楼层

搞了一整天都是点"保存"或"取消"后再运行"GETDATA"才能返回前一次输入的"P""D""N""R"值,请问如何实现点击"选择"或"继续选择"后显示的对话框中显示前一次输入的"P""D""N""R"值呢,请大家指教.谢谢

DCL文件:

getdata : dialog {
  label="提取多义线顶点坐标";
  : boxed_column {
   label="列表";
   : list_box {key="list1";width=20;height=20;}
   : column {
    : row {
     : edit_box {label="P:";key="P";edit_width=3;}
     : edit_box {label="D:";key="D";edit_width=6;}
     : row {
      : edit_box {label="N:";key="N";edit_width=3;}
     }
     : edit_box {label="R:";key="R";edit_width=6;}
    }
   }
  }
  :row {
   :retirement_button {label="选择..";key="xz";}
   :retirement_button {label="继续选择..";key="jxxz";}
   :retirement_button {label="保存..";key="accept";is_default=true;}
   :button{label="取消";key="cancel";is_cancel=true;}
  }
}

LISP文件:

(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)
)
(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 "getdata")) 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))
)

发表于 2008-6-15 23:41:00 | 显示全部楼层
这样试试:
  1. (defun setdialog ()
  2.   (set_tile "P" (if p (itoa p) "1"))
  3.   (set_tile "D" (if D (rtos D 2) "508"))
  4.   (set_tile "N" (if N1 (itoa N1) "4"))
  5.   (set_tile "R" (if R1 (rtos R1 2) "500"))
  6.   (mode_tile "jxxz" 1)
  7.   (mode_tile "bcsj" 1)
  8. )
  9. (defun GETVALOFDIA ()
  10.   (setq p (read (get_tile "P"))
  11.         d (read (get_tile "D"))
  12.         n1 (read (get_tile "N"))
  13.         r1 (read (get_tile "R")))
  14. )
  15. (defun showbutton ()
  16.   (mode_tile "jxxz" 0)
  17.   (mode_tile "bcsj" 0)
  18. )
  19. (defun showlist (/ i lst)
  20.   (setq i 0)
  21.   (start_list "list1")
  22.   (repeat (length lbl)
  23.    (setq lst (nth i lbl))
  24.    (add_list (car lst))
  25.    (MAPCAR (quote ADD_LIST) (cadr lst))
  26.    (setq i (1+ i))
  27.   )
  28.   (end_list)
  29.   (set_tile "P" (if p (itoa p) "1"))
  30.   (set_tile "D" (if D (rtos D 2) "508"))
  31.   (set_tile "N" (if N1 (itoa N1) "4"))
  32.   (set_tile "R" (if R1 (rtos R1 2) "500"))
  33. )
  34. (DEFUN C:getdata (
  35. ;/ P D SST H fi N1 I J K NAME DXF TYPE_LINE XY_COUNT F x y PT1 R1
  36. )
  37.   (setq lbl (list) re 5)
  38.   (IF (> (SETQ DCL_ID (LOAD_DIALOG "getdata1")) 0) (progn
  39.    (while (> re 1)
  40.     (IF (NEW_DIALOG "getdata" DCL_ID "") (PROGN
  41.      (if (= (length lbl) 0) (setdialog) (showlist))
  42.      (action_tile "xz" "(showbutton)(getvalofdia)(done_dialog 2)")
  43.      (action_tile "jxxz" "(getvalofdia)(done_dialog 3)")
  44.      (action_tile "accept"  "(GETVALOFDIA) (DONE_DIALOG 1)")
  45.      (action_tile "cancel" "(DONE_DIALOG 0)")
  46.      (SETQ RE (START_DIALOG))
  47.      (if (or (= RE 2) (= RE 3)) (progn
  48.       (if (= re 2) (setq lbl (list)))
  49.       (PROMPT " \n选多义线:")
  50.       (if (SETQ SST (SSGET '((0 . "*POLYLINE")))) (progn
  51.        (SETQ J 0 te (list))
  52.        (REPEAT (SSLENGTH SST)
  53.         (setq ta (list (strcat (itoa p) "," (rtos D 2 3) "," (rtos R1 2 3) "," (itoa N1))))
  54.         (SETQ NAME (SSNAME SST J))
  55.         (SETQ J (1+ J))
  56.         (SETQ DXF (ENTGET NAME))
  57.         (SETQ TYPE_LINE (CDR (ASSOC 0 DXF)))
  58.         (SETQ XY_COUNT (EVAL (READ (STRCAT "(" TYPE_LINE " DXF NAME)"))))
  59.         (setq k 0 tl (list))
  60.         (repeat (length xy_count)
  61.          (setq y (nth k xy_count))
  62.          (setq h (caddr y))
  63.          (setq x (cadr y))
  64.          (setq y (car y))
  65.          (setq tl (cons (strcat (rtos y 2 3) "," (rtos x 2 3) "," (rtos h 2 3)) tl))
  66.          (setq k (1+ k))
  67.         )
  68.         (setq te (append te (list (append ta (list (reverse tl))))))
  69.         (setq p (1+ p))
  70.        )
  71.        (setq lbl (append lbl te))
  72.       ))
  73.      ))
  74.     )
  75.      (ALERT "Unable to display dialog box!\n无法显示对话框!")
  76.     )
  77.    )
  78.     (UNLOAD_DIALOG DCL_ID)
  79.    )
  80.    (ALERT "Unable to open dialog box!\n无法装载对话框!")
  81.   )
  82.   (if (= RE 1) (progn
  83.    (setq fn (if fn fn ""))
  84.    (setq fn (if fn fn "") fn (getfiled "写出文件" fn "Txt" 1))
  85.    (setq f (open fn "w"))
  86.    (setq i 0)
  87.    (repeat (length lbl)
  88.     (setq lcl (nth i lbl) i (1+ i))
  89.     (princ (car lcl) f)
  90.     (princ "," f)
  91.     (setq ldl (cadr lcl) j 0)
  92.     (repeat (length ldl)
  93.      (princ (if (= j 0) "" ",") f)
  94.      (princ (nth j ldl) f)
  95.      (setq j (1+ j))
  96.     )
  97.     (princ "\n" f)
  98.    )
  99.    (close f)
  100.   ))
  101.   (princ)
  102. )
  103. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  104. (defun POLYLINE (DXF E1 / XY E2 count_xy pd)
  105.   (setq count_xy nil)
  106.   (SETQ DXF (MEMBER (ASSOC 330 DXF) DXF))
  107.   (SETQ E2 (ENTNEXT E1))
  108.   (SETQ DXF (ENTGET E2))
  109.   (setq e1 (cdr (assoc 0 dxf)))
  110.   (while (= e1 "VERTEX")
  111.    (setq e1 (cdr (assoc 10 dxf)))
  112.    (setq pd (cdr (assoc 70 dxf)))
  113.    (if (/= pd 16) (setq count_xy (cons e1 count_xy)))
  114.    (setq e1 e2)
  115.    (SETQ E2 (ENTNEXT E1))
  116.    (SETQ DXF (ENTGET E2))
  117.    (setq e1 (cdr (assoc 0 dxf)))
  118.   )
  119.   (setq COUNT_XY (reverse count_xy))
  120. )
 楼主| 发表于 2008-6-16 01:35:00 | 显示全部楼层

感谢ZZXXQQ斑竹,发现程序有点小问题:

初次选完多段线后二次再点"选择"是将新选数据替换前面数据(即将前面数据清空后再输入新选数据,"P"=1)

目前"P" 是累计前面数据的.(只要求"继续选择"时将累计前面数据)

请您查查原因.

发表于 2008-6-16 20:21:00 | 显示全部楼层
当点[选择]时程序已经将表lbl清空了。不知道为什么是累计数据。
 楼主| 发表于 2008-6-16 20:39:00 | 显示全部楼层
ZZXXQQ可否帮忙调试一下该程序,查查"当点[选择]时程序已经将表lbl清空"时为何"P"值还会累加,这是什么原因引起的呢???
 楼主| 发表于 2008-6-17 15:02:00 | 显示全部楼层

嘎嘎.....

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

发表于 2013-4-28 03:07:06 | 显示全部楼层
把CAD关了再重启,输入框的数值还在吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-30 12:34 , Processed in 0.166713 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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