找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1614|回复: 18

[求助] [求助]:DCL对话框怎样编写?

[复制链接]
发表于 2005-10-22 18:55:06 | 显示全部楼层 |阅读模式

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

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

×
想编个对话框,实现用对话框来运行LISP程序,不过没做过不知道怎样开头,那个前辈能做个示例,让小弟自己试着编编?

例如:点一下对话框中的按键,即运行 LINE_XQ.LSP 程序中的 指令 PEXQ,调出对话框文件的LSP又怎样做呢?

请各大侠指教~~~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-22 19:23:53 | 显示全部楼层
可以买一本书看看,或是在CAD帮助菜单.DCL一般用的人不是很多,个人认为.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-22 19:54:49 | 显示全部楼层 |阅读模式

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

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

×
条件所限,现在没太多的时间去买书从头研究,希望有那位前辈能举个例子来让我推磨。这样比较快一点。想做这个的原因是我收集了大量的LISP程序,但是过多的指令不方便别人的使用,因为我想编出来给别的同事使用,所以做成对话框形式会比较方便。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-22 20:51:37 | 显示全部楼层
以下是一个简单画倒圆角长方形的:
1、lsp文件:
;;ibox.lsp
(defun c:ibox ()
  (setq dcl_id (load_dialog "box.dcl"))
  (if (not (new_dialog "box" dcl_id))
    (exit)
  )
  (action_tile "1" "(setq iw 25 ih 20 ir 5)")
  (action_tile "2" "(setq iw 35.5 ih 30 ir 10)")
  (action_tile "3" "(setq iw 50 ih 40 ir 15)")
  (action_tile "4" "(setq iw 75 ih 50 ir 20)")
  (if (= 1 (start_dialog))
    (progn
      (setq ip (getpoint "\n插入点:")
            ix (car ip)
            iy (cadr ip)
      )
      (command "rectang"
               "f"
               ir
               (list (- ix iw) (- iy ih))
               (list (+ ix iw) (+ iy ih))
      )
    )
  )
  (unload_dialog dcl_id)
  (print)
)
2、dcl文件:
//编写DCL程序//
box : dialog {
        label = "简单的对话框";
        :button {label = "box01"; key = "1";}
        :button {label = "box02"; key = "2";}
        :button {label = "box03"; key = "3";}
        :button {label = "box04"; key = "4";}
        ok_cancel;
             }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-22 21:39:22 | 显示全部楼层
thank's~~ 我先研究一下测试后,输入 ibox 没调出对话框直接退出,输入box后是绘制三维四方体。没有我想要的对话框,而且我的情况是已经有一大堆的LISP程序文件,只是要综合在一个对话框中加载和运行这些程序。能提供这样的例子吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-23 00:48:08 | 显示全部楼层
是ibox没错,box是AUTOCAD的命令,你将1后所书的程序保存为.lsp文件,将2后的程序保存为box.dcl文件并保存于AUTOCAD支持搜索的文件夹下就可以了!比如说保存在图片中所示的任何文件夹:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-23 08:44:39 | 显示全部楼层
THANK'S~~~~可以用了,不过看不懂,而且跟我想做的有点不一样,能不能直接帮我编一个开头?
我想要的效果是按一下 (不用选择 "确定" 或 "否" )  就直接加载LINE_XQ.lsp,然后同时执行PEXQ 指令。开了头后,我就可以照着葫芦画瓜了~~~~ 麻烦你了~~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-23 09:09:33 | 显示全部楼层
最初由 瀛丹 发布
[B]THANK'S~~~~可以用了,不过看不懂,而且跟我想做的有点不一样,能不能直接帮我编一个开头?
我想要的效果是按一下 (不用选择 "确定" 或 "否" )  就直接加载LINE_XQ.lsp,然后同时执行PEXQ 指令。开了头后,我就可以... [/B]

直接编辑到菜单文件多简单:省事、维护方便、使用简捷。
可以参考:签名栏下的“★实用程序汇总(test系列程序)”
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-23 09:51:34 | 显示全部楼层
确如xyp1964兄所说,编辑菜单文件最简单!
比如我的一个菜单(保存为.mnu文件于support文件夹下),后在AUTOCAD中用menuload加载:
***MENUGROUP=xuefeng


//
//   Begin AutoCAD Pull-down Menus
//

***POP1
**xuefeng
ID_Mnxuefeng    [薛峰(&X)]
ID_xuefeng      [->薛峰(&N)]
ID_PlotSetup    [页面设置管理器(&PGS)]^C^C_pagesetup
ID_MYSCRIPT     [打开脚本文件(&SCR)]^C^C_SCRIPT
ID_MYMSLIDE     [幻灯片制作(&SLD)]^C^C_MSLIDE
ID_MYVSLIDE     [幻灯片播放(&VLD)]^C^C_VSLIDE
ID_Dtext        [<-单行文字(&S)]^C^C_dtext
ID_MYBLOCKS     [我的块(&B)]$I=ACAD.IMAGE_MYBLOCKS $I=ACAD.*
ID_TUKUANGBLOCK [A3图框对话框(&T)]^C^C_tukuang
ID_DANGQIANG    [挡墙横断绘制对话框(&DQ)]^C^C_dangqiang
ID_HANDONG        [->涵洞(&HD)]
ID_HDDUIHK        [获取数据...]^C^C_hd_getdialoginput
ID_HDHENGDUAN        [绘制横断图]^C^C_hd_hengduan
ID_HDLIMIAN        [绘制立面图]^C^C_hd_limian
ID_HDPINGMIAN        [<-绘制平面图]^C^C_hd_pingmian
加载后图片如下:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-23 11:16:24 | 显示全部楼层
这个我也想过,但是感觉调用不太方便,弹出对话框选择会方便直观一点。研究了一下,已经可以编出对话框了,只是调用LISP还有问题,麻烦各高手帮忙解决一下,我把我写的帖出来,看看那里出错了。

;////dcl 文件///
win : dialog {
label="指令集合";
:button{
label="快速连线";
key="YH_1";
}

:button{
label="图转块";
key="YH_2";
}

:button{
label="测量";
key="YH_3";
}
ok_cancel;
    }

;;//////lisp 文件 ////

(defun c:win (/ YH_DCLID)
  (setq YH_DCLID (load_dialog "win.dcl"))
  (new_dialog "win" YH_DCLID)
  (action_tile "YH_1" "(done_dialog)(c:tta)")
  (action_tile "YH_2" "(done_dialog)(c:tvb)")
  (action_tile "YH_3" "(done_dialog)(c:df)")
  (start_dialog)
  (unload_dialog YH_DCLID)
  (princ)
)

;;;;; tta 和 tvb 分别是两个lisp 文件,我已经在 acad.lsp 中加入了

(DEFUN C:TVB() (if (not tvb) (load "D:/Program Files/AutoCAD WG/WIN/BLOCK_tvb"))(c:tvb))
(DEFUN C:tta() (if (not tta) (load "D:/Program Files/AutoCAD WG/WIN/LINE_tta"))(c:tta))
(defun c:df ()(setvar "osmode" 167)(command "dist"))

点选对话框前两项中一项后,指令是执行了,但对话框不消失,CAD就动不了了~~~只能强制关闭CAD。只有第三项 测量 ( df )  这一项运行没问题,可能是因为这一项是系统自带的指令吧。
各大侠能帮忙修正一下吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-23 11:51:14 | 显示全部楼层
最初由 瀛丹 发布
[B]这个我也想过,但是感觉调用不太方便,弹出对话框选择会方便直观一点。研究了一下,已经可以编出对话框了,只是调用LISP还有问题,麻烦各高手帮忙解决一下,我把我写的帖出来,看看那里出错了。

;////dcl 文件///... [/B]

dcl的调用和调试相对较复杂,容易出错甚至系统崩溃。
这样的下拉菜单多简单(参考):
[php]
***POP1
[指令集合]
[--]
[快速连线]^C^C^P(if(not c:tta)(load"LINE_tta"));tta
[图转块]^C^C^P(if(not c:tvb)(load"BLOCK_tvb"));tvb
[测量]^C^C^P(setvar "osmode" 167);dist
[--]
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-23 12:31:44 | 显示全部楼层
(defun c:win ()
  (setq dcl_id (load_dialog "win.dcl"))
  (setq do_what 2)
  (while (>= do_what 2)
    (if        (= null (new_dialog "win" dcl_id))
      (progn
        (princ "\n未能显示对话框。")
        (setq dialogshow nil)
        (exit)
      )                                        ;progn结束
    )
    (action_tile "YH_1" "(done_dialog 3)")
    (action_tile "YH_2" "(done_dialog 4)")
    (action_tile "YH_3" "(done_dialog 5)")
    (action_tile "accept" "(done_dialog 0)")

    (setq do_what (start_dialog))
    (cond
      ((= do_what 0)
       (princ "\n对话框被取消。")
       (exit)
      )
      ((= do_what 3)
       (c:tta)
      )
      ((= do_what 4)
       (c:tvb)
      )
      ((= do_what 5)
       (c:df)
      )
    )
  )
  (unload_dialog dcl_id)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-23 13:00:21 | 显示全部楼层
实在太感激了~~~~lisp 方面问题解决了。现在开始研究一下,再做个好看的对话框... 谢谢两位大侠~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-23 13:02:57 | 显示全部楼层
大侠不敢当,xyp1964 斑竹才是!
我是一只小小小小鸟!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-23 13:30:31 | 显示全部楼层
对话框有对话框的好处,如果仅仅用来启动命令或函数,菜单也就行了.
程序中如果要多选项或显示图片,或联动改数值,还是用对话框方便.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 18:28 , Processed in 0.198738 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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