lailaifa 发表于 2025-4-21 18:52:51

求助

哪位大佬能出手,优化下我这个DCL,我想要右边拾取到数值后联动到对应左边的对话框里,不知道怎么写,望大佬们能指导下。

xiao1984 发表于 2025-4-21 19:48:19

(defun c:tt (/ *get-lujing* dcl_id get-lujing re sg-lt-yk-getdata-zhinengwenzitihuan str ent txt old-dcl)
(or sg-lt-xdx (setq sg-lt-xdx ""))
(or sg-lt-jdx (setq sg-lt-jdx "******"))

(defun sg-lt-yk-getdata-zhinengwenzitihuan ()
    (setq sg-lt-xdx (get_tile "sg-lt-xdx"))
    (setq sg-lt-jdx (get_tile "sg-lt-jdx"))
)

(defun get-text-from-user (key / ent txt)
    (princ "\n请在屏幕上选择文字或数字: ")
    (if (setq ent (entsel))
      (progn
      (setq txt (cdr (assoc 1 (entget (car ent)))))
      (if (= key "sqjdx")
          (setq sg-lt-jdx txt)
          (setq sg-lt-xdx txt)
      )
      txt
      )
    )
)

(setq old-dcl (findfile "DclTemp.dcl"))
(if old-dcl (vl-file-delete old-dcl))

(if (= (setq dcl_id (load_dialog (sg-lt-yk-make-dcl-zhinengwenzitihuan))) 0)
    (progn (alert "\n无法显示对话框!") (exit))
)

(setq re 4)

(while (>= re 2)
    (if (not (new_dialog "dllC" dcl_id))
      (progn (alert "\n无法显示对话框!") (exit))
    )
   
    (set_tile "sg-lt-xdx" sg-lt-xdx)
    (set_tile "sg-lt-jdx" sg-lt-jdx)
   
    (action_tile "sqjdx" "(done_dialog 2)")
    (action_tile "sqxdx" "(done_dialog 3)")
    (action_tile "accept" "(sg-lt-yk-getdata-zhinengwenzitihuan)(done_dialog 1)")
    (action_tile "cancel" "(done_dialog 0)")
   
    (setq re (start_dialog))
   
    (cond
      ((= re 2) (get-text-from-user "sqjdx"))
      ((= re 3) (get-text-from-user "sqxdx"))
      ((= re 1) (sg-lt-zhinengwenzitihuan))
      ((= re 0) nil)                        
    )
)

(unload_dialog dcl_id)
(princ)
)

(defun sg-lt-yk-make-dcl-zhinengwenzitihuan (/ lst_str str file f)
(setq lst_str '(
    "dllC:dialog"
    "{ // start dcl"
    "label = \"文字替换\";"
    ":column{"
    ":row{"
    ":row{:edit_box{label=\"旧对象:\";key=\"sg-lt-jdx\"; edit_width=10;}}"
    ":button{label = \"拾取\";key = \"sqjdx\" ;}}"
    ":row{"
    ":row{:edit_box{label=\"新对象:\";key=\"sg-lt-xdx\"; edit_width=10;}}"       
    ":button{label = \"拾取\";key = \"sqxdx\" ;}}"                                                               
    "}"
    ":row{"
    ":button{label=\"确定(&Q)\";key=\"accept\";is_default=true;height=3;}"                                                                                       
    ":button{label=\"取消(&C)\";key=\"cancel\";is_cancel=true;height=3;}"
    "}"
    "fixed_width=true;"
    "alignment=left;"
    "} "        
))

(setq file (vl-filename-mktemp "DclTemp.dcl"))
(setq f (open file "w"))
(foreach str lst_str
    (princ "\n" f)
    (princ str f)
)
(close f)
file
)注释了你的幻灯片文件路径,导致程序报错无法加载,你看看是不是这样

chen3732088 发表于 2025-4-21 20:09:17

(defun C:MM ()
(vl-load-com)
(setq texta "")
(while
    (progn
      (setq tmp-dcl-file-name (vl-filename-mktemp nil nil ".dcl"))
      (setq dcl_file (open tmp-dcl-file-name "w"))
      (foreach x
      '(
          "ZW:dialog {"
          "label = \"测试\";"
          ":edit_box { key = \"AAA\";}"
          ":button { label = \"拾取\"; key = \"CCC\"; }"
          "ok_cancel;"
          "}"
      )
      (write-line x dcl_file)
      )
      (close dcl_file)
      (setq dcl_id (load_dialog tmp-dcl-file-name))
      (vl-file-delete tmp-dcl-file-name)
      (if (not (new_dialog "ZW" dcl_id))(exit))
      (set_tile "AAA" texta)
      (action_tile "CCC" "(done_dialog 2)")
      (action_tile "accept" "(done_dialog 1)")
      (action_tile "cancel" "(done_dialog 0)")
      (setq AA (start_dialog))
      (unload_dialog dcl_id)
      (cond
      ((= AA 2)(setq texta (YYDS)))
      (T nil)
      )
      )
    )
(princ)
)
(defun YYDS ()
(setq ent (entsel "\n选择一个文字对象: "))
(if ent
    (progn
      (setq data (entget (car ent)))
      (cdr (assoc 1 data))
    )
)
)


lailaifa 发表于 2025-4-22 08:15:21

xiao1984 发表于 2025-4-21 19:48
(defun c:tt (/ *get-lujing* dcl_id get-lujing re sg-lt-yk-getdata-zhinengwenzitihuan str ent txt old ...

感谢大佬,妙笔生花
页: [1]
查看完整版本: 求助