wosiguwozai0830 发表于 2023-3-7 20:23:17

文本输入框

本帖最后由 wosiguwozai0830 于 2023-3-7 20:25 编辑


[*];文本输入框
[*](defun inputbox(msg / res dcl_id )
[*](setq res "")
[*](setq dcl_id(fy_DclWrite
[*]                (list "tywbk:dialog{"
[*]                   (strcat "label=\""msg "\";" )
[*]                   ":edit_box{label=\"输入:\";key=\"tywbk_wb\";edit_limit=100;edit_width=60;fixed_width=true;allow_accept=true;}"
[*]                   ":row{"
[*]                   ":ok_button{label=\"确定\";key=\"tywbk_ok\";}"
[*]                   ":cancel_button{label=\"关闭\";}"
[*]                   "}"
[*]                   "}"
[*]               )
[*]            ))
[*](new_dialog "tywbk" dcl_id)
[*](action_tile "tywbk_ok" "(setq res(get_tile \"tywbk_wb\" ))(DONE_DIALOG)")
[*](action_tile "cancel" "(setq res \"\")")
[*](start_dialog)
[*](unload_dialog dcl_id)
[*]res
[*])
[*];来源于明经论坛,临时生成Dcl文件,返回dcl_id;by nonsmall
[*](defun fy_DclWrite (lst / dcl_file file str dcl_id dcl-name)         
[*](vl-load-com)
[*](setq dcl_file (vl-filename-mktemp nil nil ".dcl"))
[*](setq file (open dcl_file "w"))
[*](foreach str lst (write-line str file))
[*](close file)
[*](setq dcl_id (load_dialog dcl_file)) ;对话框加载
[*](vl-file-delete dcl_file) ;加载后删除dcl文件
[*];(setq dcl-name (substr (car lst) 1 (vl-string-search ":dialog" (car lst))))
[*];(new_dialog dcl-name dcl_id)
[*]dcl_id
[*])
[*];使用(setq a1(inputbox "输入文本"))

XPG 发表于 2023-3-8 09:18:22

干嘛的啊?

e2002 发表于 2023-3-8 09:46:40

如果可能,最好是把这些常规简单输入框,全部写出来,作为标准函数库。
我之前是把doslib中那些主要的UI函数写了一个对应的lisp/dcl版本。后续写具体功能程序时只需要调用即可。这些函数与doslib函数可以对应替换,这样在AutoCAD for Mac 中因为没有doslib库可用时,就使用lisp/dcl版本的函数。

d1742647821 发表于 2023-3-8 14:01:52

一个InputBox解决的事儿,lisp真费劲

菜鸟初来乍到 发表于 2023-3-9 12:02:51

感谢楼主分享

magicheno 发表于 2023-3-9 13:53:42

感谢大佬分享

wosiguwozai0830 发表于 2023-3-9 15:07:06

XPG 发表于 2023-3-8 09:18
干嘛的啊?

命令行输入,涉及中英文转换时,容易出错,直接就跳到下一行,用文本输入框能避免这个问题

hzyhzjjzh 发表于 2023-3-10 12:56:09

感谢楼主分享{:1_1:}

cghdy 发表于 2023-3-25 09:41:06

研究下,不知道有没有多参数的写法,很实用
页: [1]
查看完整版本: 文本输入框