下面这个程序代码是从网上下来,用来显示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
- )
- )
- )
|