找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 803|回复: 7

[原创] 编写对话框

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-7-26 15:33:43 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 /db_自贡黄明儒_ 于 2022-5-20 10:53 编辑

今天有网友问我对话框怎么写,其实我也不太懂。我也是后来掌握的慢慢理解加深的。对话框其实就下面4句
(setq dclid (load_dialog fname))①
(new_dialog "SameEnt" dclid)②
(setq return# (start_dialog))③
(unload_dialog dclid)④
我一直认为最后一句④是必要的,highflybird大师说可有可无,想想也是,现在内存很大,卸不卸载有什么关系。
第一句①当然是必要的,不论是lisp、对话框DCL、或者其它什么程序,总是要选调入内存才能运行的。所以对话框只需要掌握②③这两句。

看下面的程序
1 用户增加的语句基本上在②③之间
2 紧跟②之后,是一个函数(setdata)。给对话框上的控件赋值。
3 (setdata)之后是对话框上控件的操作。一般有action_tile,set_tile,mode_tile
要说明一下的是:A 后面有done_dialog的,会使对话框消失。那么对话框上的数据会消失,所以要写一个函数(getdata)以获取对话框上的数据,如㈡.
B (done_dialog 1)后面这个1,会传递给③句的return#,这相当的奇怪。
C 如果要在屏上交互点取东西,那么对话框必须消失,所以必需要done_dialog,如㈢。这句赋给return#=2,所以对话框能循环出现。
D ③之后是判断,根据return#的值做不同的事。因为"Pick1"和"Pick2"对话框都会消失。
C 对话框中的控件如果是" ok_only;",那么㈡可以不要。默认值return#=1

(setq dclid (load_dialog fname))
(setq return# 3)
(while (> return# 1)
  (new_dialog "SameEnt" dclid);②
  (setdata);㈠
  (action_tile "accept" "(getdata)(done_dialog 1)");㈡
  (action_tile "Pick1" "(getdata)(done_dialog 2)");㈢
  (action_tile "Pick2" "(done_dialog 3)")
  (action_tile "ra1" "(getdata)(doRadio)")
  (action_tile "ra2" "(getdata)(doRadio)")
  (ACTION_TILE "l3" "(setq val $value)(dol3)")
  (setq return# (start_dialog));③
  (cond
    ((= return# 1))
    ((= return# 2) (doPick1))
    ((= return# 3) (doPick2))
  )
)
(unload_dialog dclid)

简而言之,以上框架中,只需要在②③之间,写好那几个函数(setdata)(getdata)(doPick1)...就可以了。

记住上次对话框的位置http://bbs.xdcad.net/forum.php?m ... =%B6%D4%BB%B0%BF%F2

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

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-7-26 16:01:09 | 显示全部楼层
我就是哪个被帮助的人...没对话框里写过循环..不知道中间技巧..谢谢黄工了..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1876个

财富等级: 堆金积玉

发表于 2017-7-26 16:03:35 | 显示全部楼层
对话框使得交互更方便,界面更友好……但设计好也得费点精力
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 104个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 812个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

发表于 2017-7-27 09:28:12 | 显示全部楼层
有自己的框架函数就好,马上套上,不用考虑太多;像晓东、秋风都是这样,很方便。另外,我一般把dcl写进lisp,方便调试。

点评

为省事,我用搭框架http://bbs.xdcad.net/thread-678622-1-1.html  发表于 2017-7-27 09:37
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 02:24 , Processed in 0.327849 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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