本帖最后由 4041186888 于 2022-5-10 22:31 编辑
最近在学DCL,有几个地方没太理解。
新手一个,都是入门问题,请勿嘲笑,还请拜托各位高手多多赐教~
Q1.我看别人程序(load_dialog "Form5.dcl")都是用相对路径,得把DCL放哪个文件夹中才可以用相对路径读取啊?我一直都用绝对路径测试的时候挺麻烦得。
Q2.DCL不是有自带的value=1设置初始值么,为什么我看好多案例都是在lisp里设置初始值,还有些程序popup_list的list的值都是在LISP中设置的,这样做有什么好处么?为了方便修改?我尝试了下直接用get_tile读取设置完初始值的DCL,没成功... ...
Q3.输入框edit_box对非整数(非数字)等输入限制,不是有allow_accept和edit_limit参数么?查询了好多帖子,都是通过LISP中解决,这个可以在DCL中直接设置么?
Q4.下面这个别人的程序为例,函数不是应该从上至下运行么?在主函数tt中,先执行(Form_getvar)去判断Form_Text1,但是此时Form_Text1应该还没有被赋值啊?此时的Form_Text1值是哪来的啊?下一行(action_tile "accept" "(Form_setvar)")才开始给Form_Text1赋值,程序没问题,但是这个逻辑实在没搞懂。
- (defun c:tt()
- (setvar "cmdecho" 0)
- (setq dcl_id (load_dialog "d:\\Form5.dcl")) ;对话框加载
- (if (not (new_dialog "Form" dcl_id))
- (progn (alert "不能装入对话框") (exit))
- )
- (Form_getvar) ;从内存获取之前设定过的变量值
- (action_tile "accept" "(Form_setvar)") ;执行操作,给变量赋值
- (action_tile "cancel" "(done_dialog)") ;取消对话框
- (start_dialog) ;启动对话框
- (unload_dialog dcl_id) ;卸载对话框
- (setvar "cmdecho" 1)
- (princ)
- )
- (defun Form_setvar()
- (setq Form_Text1 (get_tile "Text1"))
- (done_dialog)
- (Form_printvar)
- )
- (defun Form_getvar()
- (if (/= Form_Text1 nil)
- (if (/= (type Form_Text1) 'STR)
- (set_tile "Text1" (rtos Form_Text1))
- (set_tile "Text1" Form_Text1)
- )
- )
- )
- (defun Form_printvar()
- (if (/= Form_Text1 nil)
- (progn
- (princ "\n 设置变量[Form_Text1]=")
- (princ Form_Text1)
- )
- )
- )
|