[求助]小小的程序, 這個對話框的內容如何實現動太顯示呢???
各位尊敬的大俠你們好.我不知這個問題如何才可能解決, 所以專門來向大家請教來了. 希望得到大家的幫忙實現. 我將非常感謝.
回复
我觉得按常规的方法可能是不行,因为"abc"取得焦点时,"t_line_one"就不能同时取得,而且只有当"abc"焦点改变时,才能确定它的值,如:
(action_tile "abc" "(setq val $Value) ") 不是焦点的问题,而是动作问题,因为在文本框里写东西的时候不会有任何动作发生,
(aciton_tile "abc" ...)要在输入确定后在会激发。所以在VL里是不可能实现这个的
回复
meflying版主说的好.lisp语言是一种脚本语言,它不是面向对象程序,只有执行完一个语句才能执行后面的语句.
比如,vb中文本框控件有change事件,文本框中输入的数据改变时可以执行其它操作... 呵呵, 我原來以為是可以的. 看了名位大俠的講解. 我明白了. 對你們熱情的解說我非常感謝 ! ! 用VBA或ARX就非常简单了! 关于对话框内容的动态显示是可以实现的
由于语言与文化的差异关于对话框的机制方面的书籍大多翻译自AUCAD的帮助文档.而AUTOCAD的帮助文档也存在着的过于简略的问题
关于本程序中的对话框显示建议将文本控件改用编辑框控件这样当在下部的编辑框中输入数字后将光标移到上面的编辑框中则上面的编辑框中的数字就会根据程序的计算而动态显示出来了
这个机理是根据对话框的动作表达式$value,$reason的缺省值,回调原因码的缺省值而自动完成的如果读者完成过滑动条与编辑框的联动程序编制就能深刻理解了
修改后的对话框程序如下
innumber:dialog{//C:TEST<BR>label="笆篈抽";<BR>:boxed_column {<BR>:edit_box{label="The circle radius:";key="t_line_one";edit_width=10;}<BR>:row{<BR>:edit_box{ label="计块:";key="abc";edit_width=10;}<BR>: ok_button { is_cancel = true;}}}}
修改后的lsp程序如下:
(DEFUN c:test (/ dcl dd)<BR> (setq dcl (load_dialog "test.dcl"))<BR> (new_dialog "innumber" dcl)<BR> (if (= alen nil)(setq alen 20))<BR> (set_tile "t_line_one" (strcat (rtos alen 2 0) "mm"));;" The circle radius [ " "mm)"<BR> (set_tile "abc" (strcat (rtos alen) ))<BR> (action_tile "abc" "(lab1 )")<BR> ;;(action_tile "accept" "(bdy_get_lengthen) (done_dialog 1) ")<BR> (setq dd (start_dialog))<BR> (command "circle" pause alen)<BR> (princ))
(defun lab1 ( / )<BR> (setq lenb (atof (get_tile "abc")))<BR> (setq alen (+ lenb alen)) <BR> (set_tile "t_line_one" (strcat (rtos alen 2 0))) <BR>)
;(defun bdy_get_lengthen ()<BR> ; (setq lenb (atof (get_tile "abc"))<BR>; alen (+ lenb alen) <BR>; )<BR> ; )
wudongwei@163.comhttp:// 楼上修改的程序确实好用,受教,现在我正在学如何编写对话框,请多指教. <P>7楼所改的,用了出问题,半径改不了!</P> 用objectdcl可以实现
页:
[1]
2