现在这是很好的编码。。。。。它完全有效!!!非常感谢你。我自己也做不到
只剩下一个问题:
第一次打开对话框时,它会以默认值打开(项目=空,状态=第一草稿)。如果我现在填写不同的数据,它会传输到自定义道具。效果完美。
如果我再次打开对话框,它将返回默认值。可以修改代码以便从自定义道具中抓回最后一个条目吗? 不客气
试试这个:
(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) 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) 更大的dcl也有更多的编辑框 我花了很长时间为你写了前两个贴出的程序,你甚至没有花不到一秒钟的时间来正确甚至完整地写下我的名字? 我真诚地向塔尔瓦特道歉。你绝对是赖特 周四晚上我一直在尝试修改代码,但几乎没有成功。可能完全错了。。。。。。。。请帮忙!
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) 我自己的代码仍然没有进展。
见上文9月2日的帖子。。。有人能帮忙吗?塔尔瓦特?
更新:
(几个小时后)
我想我明白了。。。。。。请稍等
页:
1
[2]