XTdwynij 发表于 2019-11-25 17:46:40

各位大佬有空帮忙修改一下对话框

;;;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。

XTdwynij 发表于 2019-11-25 17:48:03

词库功能。

XTdwynij 发表于 2019-11-25 18:18:19

编辑框默认""。最好在当前dwg上有记忆功能。😁。麻烦大佬们了。

XTdwynij 发表于 2019-11-25 21:37:45

好像不行,一关cad重新打开,词库中的内容就又初始化了。只能在当前dwg中才会有记忆。

lxy_2080 发表于 2019-11-25 21:52:44

写入TXT文档

XTdwynij 发表于 2019-11-25 22:33:21

lxy_2080 发表于 2019-11-25 21:52
写入TXT文档

对,我也是这意思。重新在学习dcl。我想要的是读取外部tet文件,在外表框中显示,然后读取列表框的值,和新增加的编辑框中的字符串一起,生成单行文字,其中列表框中和编辑框中都可以是空值。代码中已经有了大部分了,差的是读取外部tet文件程序。

XTdwynij 发表于 2019-11-25 22:45:57

  (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 ;

可以帮忙整合一下功能叫?大佬

XTdwynij 发表于 2019-11-25 22:49:13


(defun show_list (key newlist)
(start_list key);增加或者删除列表
(mapcar
    'add_list ;增加列表进去
    newlist
)
(end_list);结束列表
)

XTdwynij 发表于 2019-11-25 22:53:07

test:dialog {
         :popup_list {
            key = "wlist" ;
            label = "插图比例" ;
      }
      :edit_box {
            alignment = centered ;
            key = "wlist1" ;
      }
    :spacer {}
    ok_cancel;
}
以上是对话框的值。整合一下就是我想要的了,但是看不懂代码。

whg587081 发表于 2019-11-26 17:35:03

增加的内容没有写进TXT里面,加几句代码就可以了,词库中的内容就初始化TXT里面内容了
页: [1] 2
查看完整版本: 各位大佬有空帮忙修改一下对话框