标准化输入对话框lisp代码
;;;标准输入对话框 <br/>;;;调用形式 (InputBox 显示的对话框名称 表( ( "editbox显示的说明" "editbox显示值" "editbox显示宽度") ...) ) <br/>;;;注意,调用参数均为字符串形式 <br/>;;;返回值为与输入表长度相等的字符串列表 <br/>;;;注意:以下代码未对输入代码格式进行检查,有需要时,需人加入格式检查的代码 <br/>(defun InputBox (strDialogName EditBoxDefList <br/>/ ResultList fStream dclname tempFileName fileN fileStream templist i <br/>dclid) <br/>;;;------------------------------------------------- <br/>(defun GetInput (len) <br/>(setq i 1 <br/>ResultList nil <br/>) <br/><br/>(repeat len <br/>(setq ResultList <br/>(append ResultList (list (get_tile (itoa i)))) <br/>) <br/><br/>(setq i (1+ i)) <br/>) <br/>) <br/>;;;------------------------------------------------- <br/>(setq tempFileName (vl-filename-mktemp "dcltmp.dcl")) <br/>(setq fileN (open tempFileName "w")) <br/><br/>(setq fileStream (list <br/>"InputBox:dialog {\n" <br/>(strcat "label =\"" strDialogName "\";\n") <br/>) <br/>) <br/>(setq i 0) <br/>(repeat (length EditBoxDefList) <br/>(setq templist (nth i EditBoxDefList)) <br/>(setq fileStream (append fileStream <br/>(list <br/>":edit_box{\n" <br/>"allow_accept = true ;\n" <br/>(strcat "edit_width =" (caddr templist) ";\n") <br/>"fixed_width = true ;\n" <br/>(strcat "key =\"" (itoa (1+ i)) "\";\n") <br/>(strcat "label=\"" (car templist) "\";\n") <br/>(strcat "value=\"" (cadr templist) "\";\n") <br/>) <br/>) <br/>) <br/><br/>(setq i (1+ i)) <br/>) <br/><br/>(setq fileStream (append fileStream <br/>(list <br/><br/>"} ok_cancel;\n" <br/>"}\n" <br/>) <br/>) <br/>) <br/>(foreach fStream <br/>fileStream <br/>(princ fStream fileN) <br/>) <br/>(close fileN) <br/><br/>(setq dclname tempFileName) <br/><br/><br/>(setq dclid (load_dialog dclname)) <br/>(if (not (new_dialog "InputBox" dclid "")) <br/>(progn (alert "对话框加载失败!") (exit)) <br/>) <br/><br/>(action_tile "accept" "(GetInput (length EditBoxDefList) ) (done_dialog 1)" ) <br/><br/>(start_dialog) <br/><br/>(unload_dialog dclid) <br/>(vl-file-delete dclname) <br/><br/>ResultList <br/>) <br/>;;;------------------------------------------------- 试试楼主的函数,谢谢分享! 试试楼主的函数,谢谢分享! 我试了一下,表里只有一项时是可以的,但表中有两项就出错了 查到原因了,是少了一个括号;;;标准输入对话框
;;;调用形式 (InputBox 显示的对话框名称 '( ( "editbox显示的说明" "editbox显示值" "editbox显示宽度") ...) )
;;;注意,调用参数均为字符串形式
;;;返回值为与输入表长度相等的字符串列表
;;;注意:以下代码未对输入代码格式进行检查,有需要时,需人加入格式检查的代码
(defun InputBox(strDialogName EditBoxDefList
/ ResultList fStream
dclname tempFileNamefileN
fileStream templist i
dclid n
)
;;;-------------------------------------------------
(defun GetInput (len / i)
(setq i 1
ResultList
nil
)
(repeat len
(setq ResultList
(append ResultList (list (get_tile (itoa i))))
)
(setq i (1+ i))
)
)
;;;-------------------------------------------------
(setq tempFileName (vl-filename-mktemp "dcltmp.dcl"))
(setq fileN (open tempFileName "w"))
(setqfileStream
(list
"InputBox:dialog {\n"
(strcat "label =\"" strDialogName "\";\n")
)
)
(setq i 0)
(repeat (length EditBoxDefList)
(setq templist (nth i EditBoxDefList))
(setq fileStream
(append fileStream
(list
":edit_box{\n"
"allow_accept = true ;\n"
(strcat "edit_width =" (caddr templist) ";\n")
"fixed_width = true ;\n"
(strcat "key =\"" (itoa (1+ i)) "\";\n")
(strcat "label=\"" (car templist) "\";\n")
(strcat "value=\"" (cadr templist) "\";\n")
"}"
)
)
)
(setq i (1+ i))
)
(setqfileStream
(append fileStream
(list
"ok_cancel;\n"
"}\n"
)
)
)
(foreach n
fileStream
(princ n fileN)
)
(close fileN)
(setq dclname tempFileName)
(setq dclid (load_dialog dclname))
(if (not (new_dialog "InputBox" dclid ""))
(progn (alert "对话框加载失败!") (exit))
)
(action_tile
"accept"
"(GetInput (length EditBoxDefList) ) (done_dialog 1)"
)
(start_dialog)
(unload_dialog dclid)
(vl-file-delete dclname)
ResultList
)
;;;-------------------------------------------------
页:
[1]