有来有去 发表于 2012-11-23 22:53:07

请教右键菜单的程序怎么使用?

下面这个程序代码是从网上下来,用来显示CAD的右键菜单,但不知为何?test主程序调用后mtext值是nil,请教大侠,这个子程序gps->popupmenu该如何用?怎么获取我选取的菜单选项值?
代码如下:

(defun c:test( / mtext)
   (setq mtext (gps->popupmenu (list "快捷菜单测试" "" "AA" "BB" "CC" "DD" "EE" "FF")))
   (cond
   ((= (strcase mtext) (strcase "AA")) (princ "选择A"))
   ((= (strcase mtext) (strcase "BB")) (princ "选择B"))
   )
   ;(princ mtext)
   (princ)
)


;(setq str (gps->popupmenu '("Line" "" "Circle" "Arc")))
(DEFUN gps->popupmenu (MENULST / acadobj currmenugroup flag fn N menus newmenu newmenuitem openmacro str thisdoc )
   (SETVAR "cmdecho" 0)
   (SETQ FLAG nil)
   (SETQ FN (OPEN "VbaMenu.mns" "w"))
   (CLOSE FN)
   (SETQ ACADOBJ (vlax-get-acad-object))
   (SETQ THISDOC (vla-get-ActiveDocument ACADOBJ))
   (SETQ MENUS (vla-get-MenuGroups ACADOBJ))
; (VLAX-FOR N MENUS (IF (= (vla-get-Name N) "VbaMenu")
; (SETQ FLAG T)
; ) (TERPRI)
; )
; (IF FLAG
; (UnLoadMenuGroup "VbaMenu")
; )
   (UnLoadMenuGroup "VbaMenu")
   (vla-Load MENUS "VbaMenu.mns")
   (SETQ CURRMENUGROUP (vla-Item MENUS "VbaMenu"))
   (IF (<= (vla-get-Count (vla-get-Menus CURRMENUGROUP)) 0)
      (PROGN
      (SETQ NEWMENU (vla-Add (vla-get-Menus CURRMENUGROUP) "V&BA Menu"))
      (FOREACH N MENULST
         (IF (= (TYPE N) (QUOTE STR))
            (COND
               ((/= N "")(SETQ OPENMACRO (STRCAT (CHR 3) (CHR 3) "(setq xxx " N ")" (CHR 32))
   NEWMENUITEM (vla-AddMenuItem NEWMENU (1+ (vla-get-Count NEWMENU)) N OPENMACRO)
                           )
                  (vla-put-HelpString NEWMENUITEM N)
               )
               ((= N "")(vla-AddSeparator NEWMENU (1+ (vla-get-Count NEWMENU))))
            )
         )
      )
      (vla-Save CURRMENUGROUP acMenuFileCompiled)
      )
      (PRINC "\nThe menu is already loaded")
   );End If
   (PRIN1)
   (MENUCMD "p0=VbaMenu.POP2")
   (MENUCMD "p0=*")
)

(defun UnLoadMenuGroup (iValue / rValue)
   (if (menugroup iValue)
   (progn
      (if (not (vl-catch-all-error-p (setq rValue (vl-catch-all-apply 'vla-unload (list (vla-item (vla-get-menugroups(vlax-get-acad-object)) iValue))))))
      (setq rValue T)
      )
      rValue
   )
   )
)

yx5277 发表于 2012-11-24 21:06:34

我也想知道

海盗曹 发表于 2015-4-6 23:07:40

(SETQ OPENMACRO (STRCAT (CHR 3) (CHR 3) "(setq xxx " N ")" (CHR 32))--》》(SETQ OPENMACRO (STRCAT (CHR 3) (CHR 3) "(setq xxx " (CHR 34) N (CHR 34) ")" (CHR 32))
这样输出为(setq xxx "string"),设置xxx为字符串,但是xxx是全局变量,我只想到这个笨方法,具体怎么使用得具体研究了吧
页: [1]
查看完整版本: 请教右键菜单的程序怎么使用?