找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 952|回复: 8

[求助] [求助]:老问题了,对话框的嵌套

[复制链接]
发表于 2005-1-25 15:07:04 | 显示全部楼层 |阅读模式

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

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

×
tushi: dialog{label= "图示";
   
   :image  
  {  key="sld" ;  
  aspect_ratio=0.8;
  width=40;
   color=-2;  
  }
: button {   
    label = "关闭";
    key = "hide";
  }
   ok_only;
}



t:dialog{label="嵌套窗口";

  : button {
    label = "显示";
    is_cancel = true;
    key = "show";
    width = 12;
    fixed_width = true;}
    ok_cancel;
               }
;**************以上为DCL内容

(defun c:qq ()
  (defun tushi_show ()
    (new_dialog "tushi" dcl_id)
   
    (action_tile "hide" "(done_dialog 2)")
    (start_dialog)
  )
  (setq dcl_id (load_dialog "ssk"))
  (new_dialog "t" dcl_id)
  (action_tile "show" "(tushi_show)")
  (start_dialog)
)
;**************以上为LSP内容
每次要关闭嵌套的对话框,程序就会关闭
实在找不着原因,请大侠帮助
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-1-25 15:30:31 | 显示全部楼层

  1. (defun c:qq ()
  2.   (defun tushi_show ()
  3.     (new_dialog "tushi" dcl_id)

  4.     (action_tile "hide" "(done_dialog 2)")
  5.     (start_dialog)
  6.   )
  7.   (setq aa 1)
  8.   (setq dcl_id (load_dialog "ssk"))
  9.   (while (< aa 3)
  10.     (new_dialog "t" dcl_id)
  11.     (action_tile "show" "(tushi_show)")
  12.     (action_tile "accept" "(unload_dialog dia_id)")
  13.     (setq aa (start_dialog))
  14.   )
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-25 15:45:23 | 显示全部楼层
那我这到底是什么原因呢?
ts1:dialog{
   label="测试对话框";
   :button{ label="新对话框";key="ts1";}
   ok_cancel;
}
ts2:dialog{
   label="测试对话框";
   :edit_box{label="测试";key="box";}
   :button{label="&sup1;关闭;key="dn2";}
   ok_cancel;
}
LISP文件:
(defun c:ts ()
  (defun newdlg ()
    (new_dialog "ts2" dcl_id)
    (set_tile "box" "测试文件")
    (action_tile "dn2" "(done_dialog 2)")
    (start_dialog)
  )
  (setq dcl_id (load_dialog "ts1"))
  (new_dialog "ts1" dcl_id)
  (action_tile "ts1" "(newdlg)")
  (start_dialog)
)
这是晓东上以前的一个帖子,很正常
我的为什么就不行啊?


还有:楼上这位仁兄,像你那样的话,第一个对话框的内容就会恢复为原始值,请教怎么解决。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-1-25 23:15:10 | 显示全部楼层
讲了很多次了:
退出对话框时保存数据,就是把该保留的读出来保存到变量(基本是get_tile)
等再要对话框时,再加入你保存的数据.

...
(setq abc "...") ;;;你肯定有个要加入初始值的
...
(defun save()...(setq abc(get_tile ...)) ...(done_dialog 0) ...) ;;;这是要退出时作保存

(defun add() ...(set_tile ... abc) ...);;;有对话时加入数据

;;;-----------------
(new_dialog "ts1" dcl_id)
(add)  ;;;不管什么时候进去,肯定要加入数据
(action_tile "hide" "(save)");;;暂时退出时,新数据保存进变量
...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-26 12:15:23 | 显示全部楼层
这是zhynt以前的程序
bg : dialog {
   label = "标高标注设置 <作者:张越 2000.6.12>";
     : column {
          : row {
          : boxed_column {
             label = "基准点:";
            : button {
               label = "基准点:〈";
               key = "pick";
            }
           : edit_box {
               label = "起始标高:";
               key = "ssbg";
            }
         }
         : boxed_column {
         label = "标高值:";
          fixed_width = true ;
            : toggle {
               label = "手工输入标高值";
                 key = "yn";
            }
            : edit_box {
            label = "标高值:";
            is_enabled = false;
            key = "bgz";
            }
            }
            }
            : row {
             : boxed_column {
              label = "比例:";
               fixed_width = true ;
            : edit_box {
              label = "作图比例:";
               fixed_width = true ;
              key = "scale1";
              value = "100";
            }
            : edit_box {
              label = "图纸比例:";
               fixed_width = true ;
              key = "scale2";
              value = "100";
            }
         }
            : boxed_column {
            label = "标高式样:";
          // fixed_width = true ;
            : toggle {
               label = "画出引出线";
            //    fixed_width = true ;
               key = "yt";
            }
            : toggle {
               label = "使之与基线平行";
          //fixed_width = true ;
               key = "ym";
            }
         }
        
         }
        }
         : boxed_column {
         label = "选择字型:";
            : popup_list {
              label = "选择字型:";
              key = "styl";
             }
               fixed_height = true;
            : concatenation {
                : text_part {
                    label = "当前字型:";
                    width = 10;
                 }
                 : text_part {
                   key = "csty";
                   width = 10;
                 }
            }
         }
       spacer;
      : row {
          ok_cancel;
          : button {
             label = "说明(&H)";
              fixed_width = true;
              key = "shuoming";
          }
          spacer;
      }
}
shuoming : dialog{
      label= "简要说明";
             : column {
                : button  {
                   label = "基准点";
                   key = "shuom1";
                }
                : button  {
                   label = "手工输入标高";
                   key = "shuom2";
                }
                : button  {
                   label = "作图比例";
                   key = "shuom3";
                }
                : button  {
                   label = "图纸比例";
                   key = "shuom4";
                }
                : button  {
                   label = "选择字型";
                   key = "shuom5";
                }
                : button  {
                   label = "使之与基线平行";
                   key = "shuom6";
                }
                ok_only;
             }
}
shuom1 : dialog {
      label= "简要说明";
     : boxed_column {
      label= "基准点说明";
        fixed_height = true;
        fixed_widht = true;
        : text {
           label = " 用于设置基准标高值的位置。";
        }
     }
     ok_only;
}
shuom2 : dialog {
      label= "简要说明";
     : boxed_column {
      label= "手工标高输入说明";
        fixed_height = true;
        fixed_widht = true;
        : text {
           label = " 打开时程序将提示你输入标高值。";
        }
        : text {
           label = " 有记忆功能。";
        }  
        : text {
           label = " 关闭时程序将直接画出插入点的标高。";
        }
     }
     ok_only;
}
shuom3 : dialog {
      label= "简要说明";
     : boxed_column {
      label= "作图比例说明";
        fixed_height = true;
        fixed_widht = true;
        : text {
           label = " 即你所要进行标注的大样图或立面图的比例。";
        }
     }
     ok_only;
}
shuom4 : dialog {
      label= "简要说明";
     : boxed_column {
        label= "图纸比例说明";
        fixed_height = true;
        fixed_widht = true;
        : text {
           label = " 即出图时所用的比例。";
        }
     }
     ok_only;
}
shuom5 : dialog {
label= "简要说明";
: boxed_column {
label= "选择字型说明";
fixed_height = true;
fixed_widht = true;
: text {
label = " 即画标高时所用的字型。";
}
}
ok_only;
}
shuom6 : dialog {
label= "简要说明";
: boxed_column {
label= "与基线平行说明";
fixed_height = true;
fixed_widht = true;
: text {
label = " 用于水暖作图时,将标高方向同管道。";
}
}
ok_only;
}



;;;       ===============================================
;;;       |             标高自动标注软件                 |
;;;       |         版本: V4.0   作者: 张越 (99.7.9-29)  |
;;;       |         修改于2000.6                         |
;;;       ===============================================
(defun C:bg (/           dx         dy    dx1   dx2   dy1         pt    txt   txt2
             oldsty         lay   pt1   pt2   pt3         pt4   pt5   ptt
             sc1   sc2
            )
(defun dxf (code elist)
  (cdr (assoc code elist))
)
  (setvar "CMDECHO" 0)
  (setq lay (getvar "clayer"))
  (command "color" "bylayer")
  (if (= nil (tblsearch "layer" "wz"))
    (command "layer" "m" "wz" "c" "7" "" "")
  )
  (if (= nil (tblsearch "layer" "bg"))
    (command "layer" "m" "bg" "c" "9" "" "")
  )
  (if (not ztsc)
    (progn
      (alert
        "    您还没有进行必要的设置\n工作,请先使用“sbg”命令。\n祝您工作愉快!\n\n
----------------作者:张越"
      )
      (exit)
    )
  )
  (setq sc1 (atoi tzsc))
  (setq sc2 (/ (atof ztsc) 100))
  (setq os (getvar "osmode"))
  (setvar "osmode" 547)
  (if (= ym1 "1")
    (progn
      (setq obline (car (entsel "请选择一条基准线")))
      (command "ucs" "OB" obline)
    )
  )
  (setq pt (getpoint "\n插入点: "))
  (setvar "osmode" 0)
  (setq orth (getvar "orthomode"))
  (setvar "orthomode" 0)
  (setq ang (getangle pt "\n方向 <用鼠标指取,直接回车为右上>:"))
  (if (= ang nil)
    (setq ang 0.5)
  )
  (setvar "orthomode" orth)
  (if (= ssbg nil)
    (setq ssbg1 0.000)
    (setq ssbg1 (atof ssbg))
  )
  (if (= yn1 "1")
    (progn
      (prompt "\n输入标高值<")
      (prompt bgz1)
      (setq txt2 (getstring ">"))
      (if (= txt2 "")
        (setq txt2 bgz1)
        (setq bgz1 txt2)
      )
      (if (or (= txt2 "0") (= txt2 "0.000"))
        (setq txt2 "%%1290.000")
      )
    )
    (progn
      (if (= opt nil)
        (progn
          (setq opt pt)
          (setq ypt (cadr opt))
          (setq xpt (car opt))
        )
      )
      (setq dy (- (cadr pt) ypt))
      (setq txt (+ (* (/ dy (* sc1 10)) sc2) ssbg1))
      (setq txt2 (rtos txt 2 3))
      (if (or (= txt2 "0.000") (= txt2 "0"))
        (setq txt2 "%%1290.000")
      )
    )
  )
  (setq pt1 (polar pt 3.14159 (* 6 sc1)))
  (setq pt2 (polar pt 0 (* 3 sc1)))
  (setvar "clayer" "bg")
  (if (= yt1 "1")
    (command "line" pt1 pt2 "")
  )
  (if (/= sty0 nil)
    (setvar "textstyle" sty0)
  )
  (cond
    ((and (> ang 0)
          (< ang (/ pi 2))
     )
     (setq pt4 (polar pt 0.785398 (* 3.5 sc1)))
     (setq pt3 (polar pt 2.356194 (* 3.5 sc1)))
     (setq pt5 (polar pt3 0 (* 15 sc1)))
     (setq ptt (polar pt5 2.094395 (* 1.1547 sc1)))
     (setq high (* 3 sc1))
     (setvar "clayer" "wz")
     (command "text" "r" ptt high "0" txt2)
    )
    ((and (> ang 4.88691)
          (< ang 6.283185)
     )
     (setq pt4 (polar pt 5.497787 (* 3.5 sc1)))
     (setq pt3 (polar pt 3.926991 (* 3.5 sc1)))
     (setq pt5 (polar pt3 0 (* 15 sc1)))
     (setq ptt (polar pt5 4.188790 (* 1.1547 sc1)))
     (setq high (* 3 sc1))
     (setvar "clayer" "wz")
     (command "text" "tr" ptt high "0" txt2)
    )
    ((and (> ang (/ pi 2))
          (< ang pi)
     )
     (setq pt3 (polar pt 0.785398 (* 3.5 sc1)))
     (setq pt4 (polar pt 2.356194 (* 3.5 sc1)))
     (setq pt5 (polar pt3 pi (* 15 sc1)))
     (setq ptt (polar pt5 1.047198 (* 1.1547 sc1)))
     (setq high (* 3 sc1))
     (setvar "clayer" "wz")
     (command "text" ptt high "0" txt2)
    )
    ((and (> ang 3.141593)
          (< ang 4.886922)
     )
     (setq pt4 (polar pt 3.926991 (* 3.5 sc1)))
     (setq pt3 (polar pt 5.497787 (* 3.5 sc1)))
     (setq pt5 (polar pt3 pi (* 15 sc1)))
     (setq ptt (polar pt5 5.325988 (* 1.1547 sc1)))
     (setq high (* 3 sc1))
     (setvar "clayer" "wz")
     (command "text" "tl" ptt high "0" txt2)
    )
  )
  (setvar "clayer" "bg")
  (setq ww (getvar "plinewid"))
  (setvar "plinewid" 0)
  (command "pline" pt4 pt pt3 pt5 "")
  (setvar "plinewid" ww)
  (setvar "clayer" lay)
  (setvar "osmode" os)
  (IF (= ym1 "1")
    (COMMAND "UCS" "")
  )
  (princ)
)
;;;;;=========================================
;;;;;              初始值设置
;;;;;=========================================
(defun c:sbg (/ whet_next dia_id sty_zh opt osan)
  (defun style ()
    (setq n (atoi (get_tile "styl")))
    (setq sty (nth n stytab))
    (setq sty0 sty)
    (set_tile "csty" sty)
  )
(defun fdzx (/ sty1 sty2 first tab sm1 sm2)
  (setq first T)
  (setq tab '())
  (setq stytab '())
  (setq sty_zh '())
  (while (setq sty1 (tblnext "style" first)) ;搜索图中字型       
    (if        (= first T)
      (setq first nil)
    )
    (if        (/= sty1 nil)
      (progn
        (setq tab (cons sty1 tab))
        (setq sty1 (nth 0 tab))
        (setq sty2 (dxf 2 sty1))        ;字型名称
        (setq sm1 (dxf 3 sty1))                ;所用小字体文件的名称
        (setq sm2 (dxf 4 sty1))                ;所用大字体文件的名称
        (setq stytab (cons sty2 stytab))
        (if (and sm2 (/= sm2 ""))
          (setq sty_zh (cons (strcat sty2 " : < " sm1 " , " sm2 " >") sty_zh))
          (setq sty_zh (cons (strcat sty2 " : < " sm1 " >") sty_zh))
        )
      )
    )
  )
)
  (defun bgzh ()
    (setq yn1 (get_tile "yn"))
    (if        (= yn1 "1")
      (progn
        (mode_tile "pick" 1)
        (mode_tile "ssbg" 1)
        (mode_tile "bgz" 0)
      )
      (progn
        (mode_tile "pick" 0)
        (mode_tile "ssbg" 0)
        (mode_tile "bgz" 1)
      )
    )
  )
  (defun shuo ()
    (if        (not (new_dialog "shuoming" dia_id))
      (exit)
    )
    (action_tile "shuom1" "(shuo1)")
    (action_tile "shuom2" "(shuo2)")
    (action_tile "shuom3" "(shuo3)")
    (action_tile "shuom4" "(shuo4)")
    (action_tile "shuom5" "(shuo5)")
    (action_tile "shuom6" "(shuo6)")
    (action_tile "accept" "(done_dialog 6)")
    (start_dialog)
  )
  (defun shuo1 ()
    (if        (not (new_dialog "shuom1" dia_id))
      (exit)
    )
    (action_tile "accept" "(done_dialog 6)")
    (start_dialog)
  )
  (defun shuo2 ()
    (if        (not (new_dialog "shuom2" dia_id))
      (exit)
    )
    (action_tile "accept" "(done_dialog 6)")
    (start_dialog)
  )
  (defun shuo3 ()
    (if        (not (new_dialog "shuom3" dia_id))
      (exit)
    )
    (action_tile "accept" "(done_dialog 6)")
    (start_dialog)
  )
  (defun shuo4 ()
    (if        (not (new_dialog "shuom4" dia_id))
      (exit)
    )
    (action_tile "accept" "(done_dialog 6)")
    (start_dialog)
  )
  (defun shuo5 ()
    (if        (not (new_dialog "shuom5" dia_id))
      (exit)
    )
    (action_tile "accept" "(done_dialog 6)")
    (start_dialog)
  )
  (defun shuo6 ()
    (if        (not (new_dialog "shuom6" dia_id))
      (exit)
    )
    (action_tile "accept" "(done_dialog 6)")
    (start_dialog)
  )
  (fdzx)
  (setq sty0 (getvar "textstyle"))
  (setq oldsty sty0)
  (setq whet_next 6)
  (if (and (not dia_id) (< (setq dia_id (load_dialog "bg")) 0))
    (exit)
  )
  (while (< 2 whet_next)
    (if        (not (new_dialog "bg" dia_id))
      (exit)
    )
    (if        (= ssbg nil)
      (set_tile "ssbg" "0.000")
      (set_tile "ssbg" ssbg)
    )
    (if        (= ztsc nil)
      (progn
        (set_tile "scale1" "100")
        (setq ztsc "100")
      )
      (set_tile "scale1" ztsc)
    )
    (if        (= tzsc nil)
      (progn
        (set_tile "scale2" "100")
        (setq tzsc "100")
      )
      (set_tile "scale2" tzsc)
    )
    (if        (= yn1 nil)
      (set_tile "yn" "0")
      (set_tile "yn" yn1)
    )
    (if        (= yn1 "1")
      (progn
        (mode_tile "pick" 1)
        (mode_tile "ssbg" 1)
        (mode_tile "bgz" 0)
        )
    )
    (if        (= yt1 nil)
      (set_tile "yt" "0")
      (set_tile "yt" yt1)
    )
    (if        (= ym1 nil)
      (set_tile "ym" "0")
      (set_tile "ym" ym1)
    )
    (if        (= bgz1 nil)
      (progn
        (set_tile "bgz" "0.000")
        (setq bgz1 "0.000")
      )
      (set_tile "bgz" bgz1)
    )
    (action_tile "pick" "(done_dialog 4)")
    (action_tile "ssbg" "(setq ssbg $value)")
    (action_tile "yn" "(bgzh)")
    (ACTION_TILE "yt" "(SETQ yt1 $VALUE)")
    (ACTION_TILE "ym" "(setq ym1 $VALUE)")
    (action_tile "bgz" "(setq bgz1 $value)")
    (action_tile "scale1" "(setq ztsc $value)")
    (action_tile "scale2" "(setq tzsc $value)")
    (start_list "styl")                        ;字型列表
    (mapcar 'add_list sty_zh)
    (end_list)
    (setq n (- (length stytab) (length (member sty0 stytab))))
    (set_tile "styl" (itoa n))                ;聚焦在所用字型上
    (action_tile "styl" "(style)")
    (if        (= sty nil)
      (set_tile "csty" sty0)
      (set_tile "csty" sty)
    )
    (action_tile "shuoming" "(shuo)")
    (action_tile "accept" "(done_dialog 1)")
    (action_tile "cancel" "(unload_dialog dia_id)")
                                        ;(action_tile "erase" "(done_dialog 0)(setq ztsc nil)
                                        ;                     (setq tzsc nil)(setq ypt nil)(setq xpt nil)")
    (setq whet_next (start_dialog))
    (if        (/= sty nil)
      (setvar "textstyle" sty)
    )
    (if        (= whet_next 4)
      (progn
        (setq osan (getvar "osmode"))
        (setvar "osmode" 512)
        (setq opt (getpoint "\n选择基准点:"))
        (setvar "osmode" osan)
        (setq ypt (cadr opt))
        (setq xpt (car opt))
      )
    )
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-26 12:30:11 | 显示全部楼层
那你看看我现在怎么做的
http://www.xdcad.net/forum/showt ... 39&pagenumber=2
就是那个画曲线的程序,里面有一个嵌套对话框。
打开第二个对话框时,第一个消失,将第二个关闭后第一个又会出现,且数据会根据第二个的执行情况更新。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-26 15:57:57 | 显示全部楼层
谢谢两位仁兄了。
兄弟到底可以实现了
可是真的加了好多行语句!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-28 02:14:10 | 显示全部楼层
你可以调用doslib对话框来嵌套,比较简单。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 21:17 , Processed in 0.335384 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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