本帖最后由 lea丶丶 于 2016-8-5 11:09 编辑
 - ;;; 下面程序定义双击反应器
- (princ "\n修改电缆数据:双击")
- (vl-load-com)
- (if (member "acdblclkedit.arx" (arx))
- (arxunload "acdblclkedit.arx" nil)
- )
- (or
- *dblclkcirclereactor*
- (setq *dblclkcirclereactor* (vlr-mouse-reactor nil' ((:vlr-begindoubleclick . dblclkedit))))
- )
- ;;; 回调函数
- (defun dblclkedit (reactorobject point / p owner en_data doc)
- (setvar "cmdecho" 0) ; 关闭命令响应
- (if (setq owner (nentselp (setq p (trans (car point) 0 1)))) ; 指定点来选择对象
- (progn
- (if (> (length owner) 2)
- (setq lea_ent (last (last owner)))
- (setq lea_ent (car owner))
- )
- (sssetfirst nil)
- (redraw lea_ent 4)
- (setq en_data (entget ent '("*"))
- doc (vlax-get (vlax-get-acad-object) "activedocument")
- )
- (if (and (cdr (assoc -3 en_data)) (= (cdr (assoc 0 en_data)) "LWPOLYLINE"))
- (show_dcl lea_ent)
-
- )
-
- ))
- (setvar "CMDECHO" 1)
- )
- (defun show_dcl (lea_ent / en_data old_data lst dclname tempname filen stream Dcl_Id r0 r1 r2 r3 new_data)
- (setq en_data (entget ent '("*")))
- (setq old_data (cdr (assoc -3 en_data)))
- (setq lst (mapcar '(lambda (x)
- (cdr (cadr x))
- )
- old_data
- ))
- (setq dclname
- (cond
- ((setq tempname (vl-filename-mktemp "temp.dcl")
- filen (open tempname "w")
- )
- (foreach stream '(
- " RENAME:dialog {label = "Lea电缆参数" ;"
- " :boxed_column {"
- " :edit_box { key = "K0" ; label = "电缆序号" ; edit_width = 20 ; fixed_width = true ; }"
- " :edit_box { key = "K1" ; label = "电缆型号" ; edit_width = 20 ; fixed_width = true ;}"
- " :edit_box { key = "K2" ; label = "电缆根数" ; edit_width = 20; fixed_width = true ;}"
- " :edit_box { key = "K3" ; label = "单根长度" ; edit_width = 20; fixed_width = true ;}"
- " }"
- "spacer_1;"
- " ok_cancel;"
- " }"
- )
- (write-line stream filen)
- )
- (close filen)
- tempname
- )
- )
- )
- (setq Dcl_Id (load_dialog dclname))
- (vl-file-delete tempname)
- (new_dialog "RENAME" Dcl_Id)
- (set_tile "K0" (setq r0 (nth 0 lst)))
- (set_tile "K1" (setq r1 (nth 1 lst)))
- (set_tile "K2" (setq r2 (nth 2 lst)))
- (set_tile "K3" (setq r3 (nth 3 lst)))
- (action_tile "K0" "(setq r0 (get_tile "K0"))")
- (action_tile "K1" "(setq r1 (get_tile "K1"))")
- (action_tile "K2" "(setq r2 (get_tile "K2"))")
- (action_tile "K3" "(setq r3 (get_tile "K3"))")
- (action_tile "accept" "(done_dialog)")
- (start_dialog)
- (unload_dialog Dcl_Id)
- (setq new_data (list '-3 (list "电缆序号" (cons 1000 r0))(list "电缆型号" (cons 1000 r1))(list "电缆根数" (cons 1000 r2))(list "单根长度" (cons 1000 r3))))
- (entmod (subst new_data (cons -3 old_data) en_data))
- (princ)
- )
为什么我用程序可以直接更新数据,
但是用双击反应器后能弹出对话框 却不能更新数据。在线求教! |