- 积分
- 63894
- 明经币
- 个
- 注册时间
- 2010-5-9
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 自贡黄明儒 于 2022-5-25 15:37 编辑
有网友问我对话框怎么写,其实我也不太懂。我也是后来掌握的慢慢理解加深的。对话框其实就下面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的值
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|