孤鹰 发表于 2012-5-21 11:48:37

谁帮忙把这程序改下吧?不会呀

(defun dia()
(setq return_value (load_dialog "dia.dcl"))
(setq what_next 2)
(while (>= what_next 2)
    (setq cnt 1)
    (if (null (new_dialog "dia" return_value))
      (exit)
   );end if
    (initial)
    (action_tile "key_xzljbz" "(setq ljbz $value) (change1)")
    (action_tile "key_xzljdm" "(setq ljdm $value)")
    ;(action_tile "help" "showhelp")
    (setq what_next (start_dialog));
    ;(if(= what_next 4)(hide))
)
(unload_dialog return_value)
(princ)
)
(defun change1()
   (setq m_list (eval(read (strcat "xzlj" xzljbz "_list"))))
   (start_list "key_xzljdm")
   (mapcar 'add_list m_list)
   (end_list)
)
(defun initial()
(setq name '("零件1类" "零件2类"))
(setq xzlj0_list '("零件1_1" "零件1_2"))
(setq xzlj1_list '("零件2_1" "零件2_2"))
(setq xzljbz "-1")
;初始化
(start_list "key_xzljbz")
(mapcar 'add_list name )
;初始化型号
(start_list "key_xzljdm")
(mapcar 'add_list xzlj_list)
(end_list)
(setq xzljbz "0")
)


对话框:
dia:dialog{
label="绘制零件";
:boxed_row{
:column{
:popup_list{
   label="零件标准";
   key="key_xzljbz";
            }
:popup_list{
   label="零件代码";
   key="key_xzljdm";
            }
      }
      }
   ok_cancel;
}

xyh 发表于 2012-5-21 16:24:50

(defun dia()
(setq return_value (load_dialog "dia.dcl"))
(setq what_next 2)
(while (>= what_next 2)
    (setq cnt 1)
    (if (null (new_dialog "dia" return_value))
      (exit)
   );end if
    (initial)
    (action_tile "key_xzljbz" "(setq ljbz $value) (change1)")
    (action_tile "key_xzljdm" "(setq ljdm $value)")
    ;(action_tile "help" "showhelp")
    (setq what_next (start_dialog));
    ;(if(= what_next 4)(hide))
)
(unload_dialog return_value)
(princ)
)
(defun change1()
   (setq m_list (eval(read (strcat "xzlj" ljbz "_list"))))
   (start_list "key_xzljdm")
   (mapcar 'add_list m_list)
   (end_list)
)
(defun initial()
(setq name '("零件1类" "零件2类"))
(setq xzlj0_list '("零件1_1" "零件1_2"))
(setq xzlj1_list '("零件2_1" "零件2_2"))
(setq ljbz "-1")
;初始化
(start_list "key_xzljbz")
(mapcar 'add_list name )
(end_list)
;初始化型号
(start_list "key_xzljdm")
(mapcar 'add_list xzlj0_list)
(end_list)
(setq ljbz "0")
)
;(dia)可执行,少了一句(end_list),ljbz和xzljbz、ljdm和xzljdm变量名各保留一个。

孤鹰 发表于 2012-5-21 17:13:57

xyh 发表于 2012-5-21 16:24 static/image/common/back.gif
(defun dia()
(setq return_value (load_dialog "dia.dcl"))
(setq what_next 2)


(end_list)在哪里加呀

孤鹰 发表于 2012-5-21 17:25:15

xyh 发表于 2012-5-21 16:24 static/image/common/back.gif
(defun dia()
(setq return_value (load_dialog "dia.dcl"))
(setq what_next 2)


还不行呀?我生成vlx文件执行下来还是错误: no function definition: DIA1,

孤鹰 发表于 2012-5-21 17:33:52

xyh 发表于 2012-5-21 16:24 static/image/common/back.gif
(defun dia()
(setq return_value (load_dialog "dia.dcl"))
(setq what_next 2)


执行下来是 quit / exit abort,怎么弄呀

孤鹰 发表于 2012-5-22 09:03:24

上面程序在生成vlx文件时会有 “警告: 运行时计算的表达式: (READ (STRCAT "xzlj" LJBZ "_list"))”怎么改啊
.

xyh 发表于 2012-5-22 09:03:41


dia:dialog{
label="绘制零件";
:boxed_row{
:column{
:popup_list{
   label="零件标准";
   key="key_xzljbz";
            }
:popup_list{
   label="零件代码";
   key="key_xzljdm";
            }
      }
      }
   ok_cancel;
}
写到文件中并取名为dia.dcl,和lisp程序放在一起,最好在支持文件夹内,贴出的程序已改。

孤鹰 发表于 2012-5-22 09:25:06

xyh 发表于 2012-5-22 09:03 static/image/common/back.gif

dia:dialog{
label="绘制零件";


我再试试看看

孤鹰 发表于 2012-5-22 09:32:43

xyh 发表于 2012-5-22 09:03 static/image/common/back.gif

dia:dialog{
label="绘制零件";


好了,我还想在如“零件1_1" 等时出现一个子对话框,自对化框里将一些参数改变下如长度 ,宽度,高度等输入进去,我找到的都是按钮,那像这样的怎么弄

xyh 发表于 2012-5-22 10:59:53

在dia.dcl中的ok_cancel之前插入
      :boxed_column {
         label="参数(mm)";
         fixed_width=true;
         :edit_box {
            label="长度L:";
            key="L";
            edit_width=4;
         }
         :edit_box {
            label="宽W:";
            key="W";
            edit_width=4;
         }
         :edit_box {
            label="高H:";
            key="H";
            edit_width=4;
         }
      }
在lsp的
   (action_tile "key_xzljbz" "(setq ljbz $value) (change1)")
    (action_tile "key_xzljdm" "(setq ljdm $value)")
插入
(action_tile "L" "(setq L (get_tile \"L\"))")
(action_tile "H" "(setq H (get_tile \"H\"))")
(action_tile "W" "(setq d0 (get_tile \"W\"))")
并修改
(action_tile "key_xzljdm" "(setq ljdm $value) (change2)")
编制change2函数
(defun change2()
;;根据ljdm值作相应处理,显示到编辑框中

;;中间省略
(set_tile "L" l)
(set_tile "W" W)
(set_tile "H" H)
)
页: [1] 2
查看完整版本: 谁帮忙把这程序改下吧?不会呀