注册 登录
明经CAD社区 返回首页

caoyin的个人空间 http://www.mjtd.com/?213172 [收藏] [复制] [分享] [RSS]

日志

模仿动态右键菜单

热度 13已有 2018 次阅读2011-11-30 09:47 |个人分类:LISP|系统分类:开发| 动态, 右键菜单

;;; 模仿动态右键菜单-----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
    )
  )
)


路过

雷人
10

握手
2

鲜花

鸡蛋

刚表态过的朋友 (12 人)

发表评论 评论 (1 个评论)

回复 e2002 2012-1-6 22:08
其实不必这么麻烦,从2000开始就支持的
只要你的提示字符串为  .... [Options/Item] ... 或者 ....[选项一(A)/[选项二(S)/[选项三(1)....]
或者 ...[0.5/0.6/0.7/0.8...]... 只要是方括号内用/号分隔就可以右键菜单了.

程序只需要处理好 (initget sKeys)(get_functions sMesg) 中的两个变量 是sKeys和是sMesg 就可以实现动态提示和关键字了

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 19:55 , Processed in 0.110410 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部