找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1056|回复: 9

[求助] 请教lisp与dcl对话框问题

[复制链接]
发表于 2015-5-23 15:57:08 | 显示全部楼层 |阅读模式

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

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

×
(defun dhk_dialog ()   ;设定初始值
  (setq dcl_id (load_dialog "dhk")) ;载入dhk.dcl文件
  (if (< dcl_id 0)
    (alert
      "没有找到对话框文件\n请将对话框文件放置在系统支持文件夹内"
    ) ;_ 结束alert
  ) ;_ 结束if
  (new_dialog "dhk" dcl_id)
  (set_tile "kb" "100")   ;设定kb初始值100mm
  (set_tile "kdi1" "0.15")  ;设定kdi1初始值0.15mm
  (set_tile "kzd1" "0.26")  ;设定kzd1初始值0.26mm
  (set_tile "kn1" "2")   ;设定kn1初始值2
  (action_tile "kobb1" "(done_dialog)(xzob1)")
  (action_tile "accept" "(get_num)(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (action_tile "info" "(info_info)")
  (setq exi (start_dialog))
) ;_ 结束defun

(defun info_info()
  (load_dialog "info")   ;载入info.dcl文件
  (new_dialog "info" dcl_id)
  (action_tile "accept" "(done_dialog 1)")
  (start_dialog)
) ;_ 结束defun
如上的程序,1运行后并没有显示设置的初始值,谁知道什么原因?2 点kobb1后,运行xzob1,对话框不退出,致使程序完全无法点选,只能结束cad 3,点选info后不跳出info设置的对话框,那个对话框预览没问题。哪位大侠给看看,先行谢过。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 924个

财富等级: 财运亨通

发表于 2015-5-23 20:50:55 | 显示全部楼层
1、没看到你的DCL文件,不知道KEY值对应的是什么控件。光看语法没问题。

点评

dhk:dialog{ label="设置(按平行宽边布置)"; spacer_1; :boxed_row{label="计算尺寸1--平行宽方向"; :column{ :edit_box{label="宽(mm)";Key="kb";edit_width=6;} :row{ :button{label="选择宽  详情 回复 发表于 2015-5-26 13:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 924个

财富等级: 财运亨通

发表于 2015-5-23 20:56:08 | 显示全部楼层
1、没看到你的DCL文件,不知道KEY值对应的是什么控件。光看语法没问题。
2、(action_tile "kobb1" "(xzob1)(done_dialong)")
3、(action_tile "info" "(info_info)(done_dialong)")
试试看吧!希望没有误人子弟!!!{:soso_e128:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9852个

财富等级: 富甲天下

发表于 2015-5-24 08:12:28 | 显示全部楼层
  1. (defun dhk_dialog ()   ;设定初始值
  2.   (if (> (setq dcl_id (load_dialog "dhk")) 0) (progn ;载入dhk.dcl文件
  3.    (if (new_dialog "dhk" dcl_id) (progn
  4.     (set_tile "kb" "100")   ;设定kb初始值100mm
  5.     (set_tile "kdi1" "0.15")  ;设定kdi1初始值0.15mm
  6.     (set_tile "kzd1" "0.26")  ;设定kzd1初始值0.26mm
  7.     (set_tile "kn1" "2")   ;设定kn1初始值2
  8.     (action_tile "kobb1" "(xzob1)(done_dialog 2)")
  9.     (action_tile "accept" "(get_num)(done_dialog 1)")
  10.     (action_tile "cancel" "(done_dialog 0)")
  11.     (action_tile "info" "(info_info)")
  12.     (setq exi (start_dialog))
  13.    )
  14.     (princ "\n无法显示对话框!")
  15.    )
  16.    (unload_dialog dcl_id)
  17.   )
  18.    (princ "\n无法加载对话框文件\n请将对话框文件放置在系统支持文件夹内")
  19.   )
  20.   (cond
  21.    ((= exi 1) ())
  22.    ((= exi 2) ())
  23.   )
  24.   (princ)
  25. ) ;_ 结束defun

  26. (defun info_info()
  27.   (setq id2 (load_dialog "info"))   ;载入info.dcl文件
  28.   (new_dialog "info" id2)
  29.   (action_tile "accept" "(done_dialog 1)")
  30.   (start_dialog)
  31. )

点评

[*](cond [*] ((= exi 1) ()) [*] ((= exi 2) ());问一下如果有这段,是不是类似(action_tile "accept" "(get_num)(done_dialog 1)")里面"(get_num)子函数就应该放到((= exi 1) (get_num))?  详情 回复 发表于 2015-5-24 09:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-24 09:53:26 | 显示全部楼层

  • (cond

  •                                
    登录/注册后可看大图
       ((= exi 1) ())

  •                                
    登录/注册后可看大图
       ((= exi 2) ());问一下如果有这段,是不是类似(action_tile "accept" "(get_num)(done_dialog 1)")里面"(get_num)子函数就应该放到((= exi 1) (get_num))?

点评

这部分代码是响应done_dialog的,是正常退出对话框后要运行的。  详情 回复 发表于 2015-5-24 18:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-24 10:06:59 | 显示全部楼层
还有个问题
(defun get_num ()                        ;取对话框数值
  (setq b (atof (get_tile "kb")))        ;转换成实数
  (setq di1 (atof (get_tile "kdi1")))
  (setq zd1 (atof (get_tile "kzd1")))
  (setq n1 (atoi (get_tile "kn1")))
) ;_ 结束defun
每个函数不定义参数,defun中的参数默认是局部函数?比如说我这里定义的n1值,别的函数不可以直接用吗?这些参数如何传递给主函数和对话框?

点评

这是读取对话框内参数的,要在未退出对话框时运行有效。 只要读取的变量名不是局部变量名,就可以在别的程序中使用。  详情 回复 发表于 2015-5-24 18:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9852个

财富等级: 富甲天下

发表于 2015-5-24 18:02:29 | 显示全部楼层
benq3 发表于 2015-5-24 09:53
  • (cond
  •    ((= exi 1) ())

  • 这部分代码是响应done_dialog的,是正常退出对话框后要运行的。
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

    已领礼包: 9852个

    财富等级: 富甲天下

    发表于 2015-5-24 18:05:28 | 显示全部楼层
    benq3 发表于 2015-5-24 10:06
    还有个问题
    (defun get_num ()                        ;取对话框数值
      (setq b (atof (get_tile "kb")))        ;转换成实数

    这是读取对话框内参数的,要在未退出对话框时运行有效。
    只要读取的变量名不是局部变量名,就可以在别的程序中使用。
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2015-5-25 07:49:07 | 显示全部楼层
    这么说是不是我这个get_num不能用在  ((= exi 1) ())这里面? (action_tile "accept" "(get_num)(done_dialog 1)")这样可以吗?(set_tile "kb" "100") 这些赋值为什么不显示?
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2015-5-26 13:58:59 | 显示全部楼层
    txc6853234 发表于 2015-5-23 20:50
    1、没看到你的DCL文件,不知道KEY值对应的是什么控件。光看语法没问题。


    dhk:dialog{
    label="设置(按平行宽边布置)";
    spacer_1;
      :boxed_row{label="计算尺寸1--平行宽方向";
    :column{
      :edit_box{label="宽(mm)";Key="kb";edit_width=6;}
      :row{
       :button{label="选择宽边";key="kobb1";edit_width=6;}
          }  
      :text{label="请选择两条平行的宽边,先选首边";}
      }
    spacer_1;
    :column{
      :edit_box{label="间距差  (mm)";Key="kdi1";edit_width=6;}
      :edit_box{label="中间等间距(mm)";Key="kzd1";edit_width=6;}
      :edit_box{label="中间等间距数量";Key="kn1";edit_width=6;}
      }
    }
    spacer_1;
    :row{
    fixed_width=true;
    alignment=centered;
    ok_cancel;
    :spacer{width=2;}
    :button{label="关于…";Key="info";edit_width = 12;}
    }
    }

    info:dialog{
    label="关于";
    :list_box{
    label="待定";
    key="word";
    width=30;
    height=10;
    fixed_width_font=true;
      }
    spacer_1;
    :row{
    alignment=centered;
    ok_only;}
    }

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-11 01:12 , Processed in 0.193642 second(s), 47 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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