dcokken 发表于 2022-7-5 19:17:54

@塔瓦特
 
现在这是很好的编码。。。。。它完全有效!!!非常感谢你。我自己也做不到
 
只剩下一个问题:
 
第一次打开对话框时,它会以默认值打开(项目=空,状态=第一草稿)。如果我现在填写不同的数据,它会传输到自定义道具。效果完美。
如果我再次打开对话框,它将返回默认值。可以修改代码以便从自定义道具中抓回最后一个条目吗?

Tharwat 发表于 2022-7-5 19:19:55

不客气
 
 
 
试试这个:

(defun c:test (/ id status in l st v1 v2)
;; Tharwat 01.09.2015        ;;
(if (and (< 0 (setq id (load_dialog "Project.dcl")))
          (new_dialog "Project" id)
   )
   (progn
   (setq in   (vla-get-summaryinfo
                  (vla-get-activedocument (vlax-get-acad-object))
                  )
         Status (list "1st draft" "2nd draft" "3rd draft" "Final")
   )
   (mapcar '(lambda (k)
                (vla-getcustombykey in k 'st)
                (setq l (append l (list st)))
            )
             '("Project" "Status")
   )
   (start_list "Status")
   (mapcar 'add_list Status)
   (end_list)
   (set_tile "Project" (car l))
   (set_tile "Status"
               (if (member (cadr l) status)
               (itoa (vl-position (cadr l) Status))
               "0"
               )
   )
   (action_tile
       "accept"
       "(if (/= (setq v1 (get_tile \"Project\")) \"\") (vla-setcustombykey in \"Project\" v1))
      (if (setq v2 (get_tile \"Status\")) (vla-setcustombykey in \"Status\" (nth (atoi v2) Status)))
                            (done_dialog)"
   )
   (action_tile "cancel" "(done_dialog)")
   (start_dialog)
   (unload_dialog id)
   )
   (if (< 0 id)
   (unload_dialog id)
   )
)
(princ)
)(vl-load-com)

dcokken 发表于 2022-7-5 19:24:50

Tha****,
 
工作起来像个魔法师!!!thanx。没有你就做不到。
 
我现在开始将代码修改为更大的dcl。我正在添加一个备用列表。
一切都很好,但我不能让Lisp程序记住第二个列表的最后一个条目。(总共需要4个列表)你能看看代码并告诉我我做错了什么吗?
 

(defun c:dprop (/ id STA PRO_DEL in l st v1 v2 v3)
;; Tharwat 01.09.2015        ;;
(if (and (< 0 (setq id (load_dialog "dprop2.dcl")))
          (new_dialog "dprop2" id)
   )
   (progn
   (setq in   (vla-get-summaryinfo
                  (vla-get-activedocument (vlax-get-acad-object))
                  )
         STA (list "" "Ontwerp" "Voorlopig" "Definitief" "Productie")
    PRO_DEL (list "" "Alleen leveren" "Montage Derden" "Montage Basis" "Montage Compleet")
   )
   (mapcar '(lambda (k)
                (vla-getcustombykey in k 'st)
                (setq l (append l (list st)))
            )
             '("PRO_NU" "STA" "PRO_DEL")
   )

   (start_list "STA")
   (mapcar 'add_list STA)
   (end_list)

   (start_list "PRO_DEL")
   (mapcar 'add_list PRO_DEL)
   (end_list)
   
   (set_tile "PRO_NU" (car l))
   (set_tile "STA"
               (if (member (cadr l) STA)
               (itoa (vl-position (cadr l) STA))
               "0"
               )
   )
         (set_tile "PRO_DEL"
               (if (member (cadr l) PRO_DEL)
               (itoa (vl-position (cadr l) PRO_DEL))
               "0"
               )
   )
   (action_tile
       "accept"
       "(if (/= (setq v1 (get_tile \"PRO_NU\")) \"\") (vla-setcustombykey in \"PRO_NU\" v1))
      (if (setq v2 (get_tile \"STA\")) (vla-setcustombykey in \"STA\" (nth (atoi v2) STA)))
      (if (setq v3 (get_tile \"PRO_DEL\")) (vla-setcustombykey in \"PRO_DEL\" (nth (atoi v3) PRO_DEL)))
                            (done_dialog)"
   )
   (action_tile "cancel" "(done_dialog)")
   (start_dialog)
   (unload_dialog id)
   )
   (if (< 0 id)
   (unload_dialog id)
   )
)
(princ)
)(vl-load-com)

dcokken 发表于 2022-7-5 19:29:14

更大的dcl也有更多的编辑框

Tharwat 发表于 2022-7-5 19:32:13

我花了很长时间为你写了前两个贴出的程序,你甚至没有花不到一秒钟的时间来正确甚至完整地写下我的名字?

dcokken 发表于 2022-7-5 19:35:35

我真诚地向塔尔瓦特道歉。你绝对是赖特

dcokken 发表于 2022-7-5 19:39:42

周四晚上我一直在尝试修改代码,但几乎没有成功。可能完全错了。。。。。。。。请帮忙!
 
v1 2 3 4 5 6 7和24(v7,v24=dcl popup_list)非常适合将它们设置为自定义道具。但popup_list V27没有。不知何故,popup_list v24中的一个值被放置在这里作为自定义值。在dcl中为popup_list v29选择的值根本没有设置。
 
第二次打开对话框时,需要抓取(获取)以前的条目。但只有v1在对话框中设置,但在v2 v4 v5 v6中也设置。
v7(“STA”)不执行任何操作,与v24 v27和v29相同
 
我仍然需要添加到v43。这些都是编辑框。有没有一种简单的方法可以让代码为上面的v工作(获取和设置值),并且易于修改,这样我就可以添加所有其他值。
 
键=v
PRO NU=v1,标准杆数NU=v2,CLI=v3,CON=v4,PRO MA=v5,DRA=v6,STA=v7,PRO DEL=v24,FSC\U T=v27,CAL\U CON=v29
 
 
如果需要dcl和dwg(在自定义道具选项卡中输入键),请告诉我。
 

;; ORGINAL BY Tharwat 01.09.2015;;
;; see below for variables/values that i still need to enter in code.
;; v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23
;; v25 v26 v28 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43
;; these v's are all editboxes

(defun c:dprop (/ id STA PRO_DEL FSC_T CAL_CON in l st v1 v2 v3 v4 v5 v6 v7 v24 v27 v29 )

(if (and (< 0 (setq id (load_dialog "dprop2.dcl")))
          (new_dialog "dprop2" id)
   )
   (progn
   (setq in   (vla-get-summaryinfo
                  (vla-get-activedocument (vlax-get-acad-object))
                  )
        STA (list "A" "A1" "A2" "A3" "A4");;v7
        PRO_DEL (list "B" "B1" "B2" "B3" "B4");;v24
FSC_T (list "C" "C1" "C2 C3" "C4");;v27
        CAL_CON (list "D" "D1" "D2" "D3");;v29
   )
   (mapcar '(lambda (k)
                (vla-getcustombykey in k 'st)
                (setq l (append l (list st)))
            )
             '("PRO_NU" "PAR_NU" "CLI" "CON" "PRO_MA" "DRA" "STA" "PRO_DEL" "FSC_T" "CAL_CON")
   )
   (set_tile "PRO_NU" (car l))        ;;v1
   (set_tile "PAR_NU" (car l))        ;;v2
   (set_tile "CLI" (car l))                ;;v3
   (set_tile "CON" (car l))                ;;v4
   (set_tile "PRO_MA" (car l))        ;;v5
   (set_tile "DRA" (car l))                ;;v6
   
   (start_list "STA")                ;;v7
   (mapcar 'add_list STA)
   (end_list)
                   (set_tile "STA"
                       (if (member (cadr l) STA)
                               (itoa (vl-position (cadr l) STA))
                                       "0"))
   
   (start_list "PRO_DEL")                ;;v24
   (mapcar 'add_list PRO_DEL)
   (end_list)
                 (set_tile "PRO_DEL"
                       (if (member (cadr l) PRO_DEL)
                               (itoa (vl-position (cadr l) PRO_DEL))
                                       "0"))
   
   (start_list "FSC_T")                ;;v27
   (mapcar 'add_list FSC_T)
   (end_list)
                 (set_tile "FSC_T"
                       (if (member (cadr l) FSC_T)
                               (itoa (vl-position (cadr l) FSC_T))
                                       "0"))
   
   (start_list "CAL_CON")                ;;v29
   (mapcar 'add_list CAL_CON)
   (end_list)
                 (set_tile "CAL_CON"
                       (if (member (cadr l) CAL_CON)
                               (itoa (vl-position (cadr l) CAL_CON))
                                       "0"))
   (action_tile
       "accept"
       "(if (/= (setq v1 (get_tile \"PRO_NU\")) \"\") (vla-setcustombykey in \"PRO_NU\" v1))
      (if (/= (setq v2 (get_tile \"PAR_NU\")) \"\") (vla-setcustombykey in \"PAR_NU\" v2))
      (if (/= (setq v3 (get_tile \"CLI\")) \"\") (vla-setcustombykey in \"CLI\" v3))
      (if (/= (setq v4 (get_tile \"CON\")) \"\") (vla-setcustombykey in \"CON\" v4))
      (if (/= (setq v5 (get_tile \"PRO_MA\")) \"\") (vla-setcustombykey in \"PRO_MA\" v5))
      (if (/= (setq v6 (get_tile \"DRA\")) \"\") (vla-setcustombykey in \"DRA\" v6))
      (if (setq v7 (get_tile \"STA\")) (vla-setcustombykey in \"STA\" (nth (atoi v7) STA)))
      (if (setq v24 (get_tile \"PRO_DEL\")) (vla-setcustombykey in \"PRO_DEL\" (nth (atoi v24) PRO_DEL)))
      (if (setq v27 (get_tile \"FSC_T\")) (vla-setcustombykey in \"FSC_T\" (nth (atoi v27) PRO_DEL)))
      (if (setq v29 (get_tile \"CON_CAL\")) (vla-setcustombykey in \"CAL_CON\" (nth (atoi v29) CAL_CON)))
                            (done_dialog)"
   )
   (action_tile "cancel" "(done_dialog)")
   (start_dialog)
   (unload_dialog id)
   )
   (if (< 0 id)
   (unload_dialog id)
   )
)
(princ)
)(vl-load-com)

dcokken 发表于 2022-7-5 19:43:07

我自己的代码仍然没有进展。
见上文9月2日的帖子。。。有人能帮忙吗?塔尔瓦特?
 
 
更新:
(几个小时后)
 
我想我明白了。。。。。。请稍等
页: 1 [2]
查看完整版本: 更改自定义的对话框