各位大佬有空帮忙修改一下对话框
;;;dia7a:dialog{;;;label="列表框的基本词库范例";
;;;:list_box{ //列表框
;;;label="常用词库菜单";
;;;key="klist"; //key值
;;;width=30; //菜单宽度
;;;height=10; //菜单高度
;;;}
;;;:edit_box{ //编辑框
;;;label="词库";
;;;key="wordstr"; //key值
;;;}
;;;:button{label="增加";key="zj";}
;;;:button{label="删除";key="sc";}
;;;spacer_1; //空出一行
;;;ok_cancel;
;;;}
###########################################################
(defun c:dia7a()
(setvar "cmdecho" 0)
(setq word_list '( "传真机" "翔虹信息" "翔虹AutoCAD技术中心""道路""规格表"))
(dcl_dia7a)
(prin1)
)
(defun dcl_dia7a()
(setq dcl_id (load_dialog "dia7a"))
(new_dialog "dia7a" dcl_id)
(start_list "klist")
(mapcar 'add_list word_list)
(end_list)
(action_tile "klist" "(sub_klist $value)")
(action_tile "accept" "(ok_dia7a)(done_dialog 1)")
(setq dd(start_dialog))
(if (= dd 1)
(progn
(setvar "cmdecho" 1)
(command "text" pause pause 0 wordstr)
(setvar "cmdecho" 0)
)
)
)
(defun sub_klist(vvs)
(set_tile "wordstr" (nth (atoi vvs) word_list))
)
(defun ok_dia7a()
(setq wordstr(get_tile "wordstr"))
)
以上是别人的程序。后来更改后,变成可以增加修改的图库。以下是别人求助的答案。第三行少了一个括号。
(action_tile "klist" "(sub_klist $value)")
(action_tile "zj" "(do_zj)")(action_tile "sc" "(do_sc)")
......
(defun do_zj( / str);;增加
(setq str (get_tile "wordstr"))
(setq word_list(append word_list (list str))
(start_list "klist")
(mapcar 'add_list word_list)
(end_list)
)
;;---------------
(defun do_sc( / str);;删除
(setq str (get_tile "wordstr"))
(setq word_list(vl-remove str word_list)
(start_list "klist")
(mapcar 'add_list word_list)
(end_list)
)
基本差不多可以实现我想要的功能。但是我dcl知识还给了时间。不会用了。把代码插进去竟然不行。
以下是我想要做的一点小修改。
编辑框移到下面,另外再增加一个编辑框,合并二个编辑框的值生成单行文字。就是这么一个简单的图库功能。生成的单行文字单独一个defun。
词库功能。 编辑框默认""。最好在当前dwg上有记忆功能。😁。麻烦大佬们了。 好像不行,一关cad重新打开,词库中的内容就又初始化了。只能在当前dwg中才会有记忆。 写入TXT文档 lxy_2080 发表于 2019-11-25 21:52
写入TXT文档
对,我也是这意思。重新在学习dcl。我想要的是读取外部tet文件,在外表框中显示,然后读取列表框的值,和新增加的编辑框中的字符串一起,生成单行文字,其中列表框中和编辑框中都可以是空值。代码中已经有了大部分了,差的是读取外部tet文件程序。 (new_dialog "test" dcl_id);启动对话框
(test_sub_3);数据成表
(show_list "wlist" word_list);增加列表 wlist插图比例返回值
(if (and
tt
(vl-position tt word_list)
)
(progn
(set_tile "wlist" (itoa (vl-position tt word_list)));设定属性值
(set_tile "wlist1" tt);wlist1编辑返回值 (setq tt (get_tile "wlist1"))
)
(progn
(set_tile "wlist" "0")
(set_tile "wlist1" "A")
)
)
(action_tile "wlist" "(test_sub_2 $value)")
(action_tile "accept" "(ok_test)(done_dialog 1)")
(action_tile "cancel" "(DONE_DIALOG 0)")
(setq dd (start_dialog))
(if (= dd 1)
(princ "\n****操作完成****")
(princ "\n****操作已取消****")
)
(princ)
)
(defun test_sub_1 (txt / dat_file ff);写入文件
(setq dat_file (findfile "test.TXT"))
(setq ff (open dat_file "a"))
(write-line txt ff);写入文件到FF文件中
(close ff)
)
(defun test_sub_2 (vvs)
(set_tile "wlist1" (nth (atoi vvs) word_list))
)
;;; 读文本数据成表
(defun test_sub_3 (/ data datalist ff file datalist1 n i)
(setq file (findfile "test.TXT"));查找这个文件
(setq ff (open file "R"));以只读方式打开这个文件
(setq data (read-line ff));读取这个文件
(setq datalist '());建一个新的表
(while data
(setq datalist (cons data datalist))
(setq data (read-line ff))
)
(close ff)
(setq word_list (reverse datalist))
(prin1)
)
(defun ok_test (/ data datalist ff file)
(setq tt (get_tile "wlist1"))
(if (= (member tt word_list) nil) ; 如果编辑栏的内容不在列表中则将其增?
; 拥搅斜?
(progn
(test_sub_1 tt)
(setq file (findfile "test.TXT"))
(setq ff (open file "R"))
(setq data (read-line ff))
(setq datalist '())
(while data
(setq datalist (cons data datalist))
(setq data (read-line ff))
)
(close ff)
(setq word_list (reverse datalist))
)
)
)
(defun show_list (key newlist)
(start_list key);增加或者删除列表
(mapcar
'add_list ;
可以帮忙整合一下功能叫?大佬
(defun show_list (key newlist)
(start_list key);增加或者删除列表
(mapcar
'add_list ;增加列表进去
newlist
)
(end_list);结束列表
) test:dialog {
:popup_list {
key = "wlist" ;
label = "插图比例" ;
}
:edit_box {
alignment = centered ;
key = "wlist1" ;
}
:spacer {}
ok_cancel;
}
以上是对话框的值。整合一下就是我想要的了,但是看不懂代码。 增加的内容没有写进TXT里面,加几句代码就可以了,词库中的内容就初始化TXT里面内容了
页:
[1]
2