热度 13|||
;;; 模仿动态右键菜单-----by caoyin 2011.11.29
;;; -------------------------------------------------------------
;;; 以前我们实现右键菜单是在菜单文件中编辑好宏,用的时候调用,
;;; 现在可以利用DYN功能和WScript.Shell对象的SendKeys方法随机实现。
;;; 适用 AutoCAD 2006 及以上版本
;;; -------------------------------------------------------------
;;; 参数:
;;; MSG------字符串,提示信息;
;;; OPTS-----包含若干字符串的表,菜单选项;
;;; DFT------缺省值。
;|
示例:
(RightClickMenu "\n指定灯具类型" '("筒灯" "射灯" "吸顶灯" "吊顶") 2)
(RightClickMenu "\n指定灯具类型" '("筒灯" "射灯" "吸顶灯" "吊顶") nil)
|;
(defun RightClickMenu (MSG OPTS DFT / WS DYN I KEY NSTR NLL)
(setq WS (vlax-get-or-create-object "WScript.Shell")
DYN (getvar 'DYNMODE)
MSG (strcat MSG " [" (car OPTS) "(1)")
I 1
KEY "1"
)
(foreach X (cdr OPTS)
(setq NSTR (itoa (setq I (1+ I)))
MSG (strcat MSG "/" X "(" NSTR ")")
KEY (strcat KEY " " NSTR)
)
)
(if DFT
(setq NLL DFT
DFT (strcat " <" (nth (1- DFT) OPTS) ">")
)
(setq DFT "")
)
(setq MSG (strcat MSG "]" DFT ": "))
(setvar 'DYNMODE 1)
(initget KEY)
(vlax-invoke-method WS 'SendKeys "{down}")
(setq KEY (vl-catch-all-apply 'getkword (list MSG)))
(setvar 'DYNMODE DYN)
(vlax-release-object WS)
(if (not (vl-catch-all-error-p KEY))
(if KEY
(atoi KEY)
NLL
)
)
)