明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3920|回复: 11

[已解答] 对话框的关闭问题

[复制链接]
发表于 2014-10-22 21:46 | 显示全部楼层 |阅读模式
2个对话框,A和B
对话框不是嵌套的关系,但是我在A对话框上做个按钮能直接启动B对话框。启动B对话框的同时A对话框能同时关闭,保留A对话框
(action_tile "anniu""(B) (done_dialog 1)")
上面这样写(done_dialog 1)关闭A对话框根本没用
这里该如何写

点评

(B) (done_dialog 1)的前后位置换一下就行了  发表于 2014-10-22 23:25
发表于 2014-10-22 22:01 来自手机 | 显示全部楼层
当然有用,难点也在这里,你是想问这个1传递到了什么地方吧,?
发表于 2014-10-22 22:10 | 显示全部楼层
dcl对话框是模态的,只有当前对话框有焦点,所以你这想法是无法实现的!
 楼主| 发表于 2014-10-22 22:56 | 显示全部楼层
自贡黄明儒 发表于 2014-10-22 22:01
当然有用,难点也在这里,你是想问这个1传递到了什么地方吧,?

没有想传递出来,纯粹是关掉A对话框。照着别人的写过来的
 楼主| 发表于 2014-10-22 22:57 | 显示全部楼层
Gu_xl 发表于 2014-10-22 22:10
dcl对话框是模态的,只有当前对话框有焦点,所以你这想法是无法实现的!

那应该如何写???
发表于 2014-10-22 23:22 | 显示全部楼层
DCL文件

  1. DA : dialog
  2. {
  3.   label = "A";

  4.   ok_cancel;
  5. }

  6. DB : dialog
  7. {
  8.   label = "B";

  9.   ok_cancel;
  10. }

  1. (defun C:TT (/ what_next)
  2.   (while (/= what_next 0)
  3.     (new_dialog "DA" (load_dialog "A.DCL"))

  4.     (setq what_next (start_dialog))

  5.     (if        (= what_next 1)
  6.       (progn
  7.         (new_dialog "DB" (load_dialog "A.DCL"))
  8.         (setq what_next (start_dialog))
  9.       )
  10.     )
  11.   )
  12. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-10-23 10:20 | 显示全部楼层
vectra 发表于 2014-10-22 23:22
DCL文件

谢谢指导
用start_dialog成功了,书上也是这么说的
怪自己理解不深入
发表于 2014-10-23 22:37 | 显示全部楼层
本帖最后由 香田里浪人 于 2014-10-23 22:40 编辑

论坛里有人写过,具体是哪位不记得,好像是自制工具箱面板,我根据他的方法,将论坛里收集的程序(软件)作了个工具箱,转载如下,可供楼主参考。

;; titl:标题; buttons:按钮列表; flag:nil先行后列T先列后行
(defun Dcl-ButtonM (titl buttons flag / a b c)
  (defun strsplist (str / i)
    (if        (setq i (vl-string-search " " str))
      (list (substr str 1 i)
            (vl-string-trim " " (substr str (+ 2 i)))
      )
    )
  )
  (defun makedcl (str_lst / fileID dclHandle)
    (setq dclfile (vl-filename-mktemp nil nil ".dcl")
          fileID  (open dclfile "w")
    )
    (cond ((= (type str_lst) 'str) (write-line str_lst fileID))
          ((= (type str_lst) 'list)
           (foreach n str_lst (write-line n fileID))
          )
    )
    (close fileID)
    (setq dclHandle (load_dialog dclfile))
  )
  (setq        b (if flag
            ":column{ label = \""
            ":row{children_alignment = top ;\n
    children_fixed_height = true ;\n label = \""
          )
        c (if flag
            ":row{children_alignment = top ;\n
    children_fixed_height = true ;\nlabel = \""
            ":column{label = \""
          )
        d '("ESC")
        a (strcat (vl-string-translate
                    "$~"
                    "AB"
                    (vl-filename-base (vl-filename-mktemp))
                  )
                  ":dialog{label=\""
                  titl
                  "\";\n"
                  b
                  "\";\n"
          )
  )
  (foreach x buttons
    (if        (listp x)
      (progn
        (setq a (strcat a c (car x) "\";\n"))
        (foreach y (last x)
          (setq        b (strsplist y)
                a (if b
                    (strcat a
                            ":button {key =\""
                            (car b)
                            "\";label=\""
                            (last b)
                            "\";}\n"
                    )
                    (strcat a "spacer_0;\n")
                  )
                d (if (/= (car b) nil)
                    (cons (car b) d)
                    d
                  )
          )
        )
        (setq a (strcat a "}\n"))
      )
      (setq a (strcat a "spacer_0;\n"))
    )
  )
  (setq        d    (cdr (REVERSE d))
        a    (strcat a
                     (if flag
                       "} spacer_1;:row"
                       "} spacer_1;:row"
                     )
;;;                     "{spacer_0;:button{key = \"HLP\";label = \"帮助\";}\n"
;;;                     ":button{key=\"ESC\";label=\"取消\";is_cancel = true;}}}"
;;;         "{alignment = centered ;\n fixed_width = true ; \n spacer_0;\n cancel_button; \n
;;;         :text{fixed_width = true ; \n width = 2;\n } \n help_button;}}"
          "{alignment = centered ; \n fixed_width = true ;\n help_button; \n :text{fixed_width = true ; \n width = 2;\n } \n cancel_button;}}"
             )
        dcl  (makedcl a)
        lst1 '()
        i    1
  )
  (foreach key d
    (setq tx   (strcat "(action_tile \""
                       key
                       "\"\"(done_dialog "
                       (itoa i)
                       ")\")"
               )
          lst1 (cons tx lst1)
          i    (1+ i)
    )
  )
  (new_dialog (substr a 1 8) dcl)
  ;(action_tile "ESC" "(done_dialog 0)")
  (action_tile "cancel" "(done_dialog 0)")
  ;(action_tile "HLP" "(alert\"常用小工具,有用?\")")
  (action_tile "help" "(alert\"    本工具所收集的所有软件,版权
归软件作者所有,不得用于商业用途。
作者尽力将本工具做得完善,但不会
因本工具的错失而造成的损失承担任
何责任。部分工具作了修改,可能还
有不足,有待补充或修改。


    \")")
  (eval (read (strcat "(progn" (apply 'strcat lst1) ")")))
  (setq ctl (start_dialog))
  (UNLOAD_DIALOG dcl)
  (vl-file-delete dclfile)
  (if (/= ctl 0)
    (progn
      (setq cmds(nth (- ctl 1) d))
    (cond
      ((or(= (eval (read (strcat "(type c:" cmds ")"))) 'SUBR)
      (= (eval (read (strcat "(type c:" cmds ")"))) 'USUBR))
       (princ "\n")
      (eval (read (strcat "(c:" cmds ")"))))
      ((or(= (eval (read (strcat "(type " cmds ")"))) 'SUBR)
      (= (eval (read (strcat "(type " cmds ")"))) 'USUBR))
       (princ "\n")
      (eval (read (strcat "(" cmds ")"))))
      (t (princ "\n")(vl-load-com)(vl-cmdf cmds))
    )
      )
   
  )
)
(defun c:cygj (/ lst)
  (setq lst '(("文字编辑修改(1)"
               ( "chtext 文字查找替换""wzth 文字替换""xgwz 修改文字""wzhb 文字合并 "  "outcsv 文本导出Excel" "wzywsf 文字原位缩放""xzwz 旋转文本 "))
              ("边长面积坐标"
              ("bcbz 边长批量标注""mjpl 闭合面积标注""mjzttj 面积导出并统计"  "gdmj 单(孤岛)面积""bcmjtj 边长面积统计" "bz 坐标编号输出""ddxzbbz 多段线坐标标注"))
              ("其他工具"
              ("bjlk 边界轮廓线" "dtgh 线段改为弧线" "znlj 线段智能连接""bdx 多线段连接""plbj 多线段编辑 ""bzzbdc 图中坐标导出""ysh2 第二窗口"))
              ("图层工具(1)"
              ("ad 单层显示 " "qw 选层显示 " "fa 显示全部""ol 关闭图层 ""xx2 图层改名改色""dqc 设置当前层" "ysh3 第三窗口 "))                          
             )
  )
  (Dcl-ButtonM "【常用工具】(第一窗口)" lst nil)
  (princ)
)
(defun c:ysh2 (/ lst)
  (setq  lst '(("图层工具(2)"
               ("xss 按选色显示" "yc 选择隐藏""ycqt 隐藏其他 " "xs 隐藏恢复 ""CBY 颜色随层"  "tchb 图层合并 " "ddzb 顶点坐标表") )
              ("其他工具(1)"
               ("stxg 审图修改" "info 动态查询信息" "FWXZ 选范围值" "scr 地形图分割" "tzhb 图纸合并 ""xtx 选择相同线""sczb 输出线段坐标") )
              ("文字编辑修改(2)"
               ("aw 文本阵列 " "fzxz 复制旋转 "  "bhm 编号码"  "znbh 智能编号" "adt 添加前后缀" "wzqx 文字齐线" "ysh 第一窗口 " )
              )
              ("加减括号"
               ("jkh 文字加括号 " "skh 删文字前后括号 " "qskh 删除所有括号 " "xgnr 修改括号内内容 ""xmwr 文字和线倾斜相同""tzff 图纸分幅" "ysh3 第三窗口"))
             )
  )
  (Dcl-ButtonM "【常用工具】第二窗口" lst nil)
  (princ)
)
(defun c:ysh3 (/ lst)
  (setq   lst '(("文字编辑修改(3)"
               ("outdoc 文本导出word " "pgzd 修改字高 " "kgb 修改高宽比"   "cw 修改线宽 " "dzbh 递增编号阵列 " "qtjz 全图形校正 ""xzyd 旋转移动")
              )
              ("其他工具(2)"
               ("wtqx 物体齐线 " "pyxd 偏移多段线"  "ff 修剪并封口 " "dxjq 多选剪切 ""txjz 图形校正 " "qgns 强功能刷""tts 画线并标注")
              )
              ("其他工具(3)"
               ("yxbz 引线标注" "mybz 动态坐标标注" "dqw 文本等距对齐 " "zdbg  自动表格""gb 局部放大""zbtt 用户坐标旋转" "ysh 第一窗口 ")
              )
              ("图层工具(3)"
               ("xcgb 选层关闭 " "xcbg 选层不关闭 " "xcsd 选层锁定" "xcbs 选层不锁定" "xcjs 选层解锁""tcgm 改图层名改色" "g1 查找快捷键 ")
              )
             )
  )
  (Dcl-ButtonM "【常用工具】第三窗口" lst nil)
  (princ)
)
发表于 2015-2-2 22:51 | 显示全部楼层
好,不错~~~~~~~~~~~~~
发表于 2015-2-28 16:20 | 显示全部楼层
香田里浪人 发表于 2014-10-23 22:37
论坛里有人写过,具体是哪位不记得,好像是自制工具箱面板,我根据他的方法,将论坛里收集的程序(软件)作 ...

感谢共享!2015年新年快乐!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-16 14:17 , Processed in 0.539809 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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