harrison-matt 发表于 2022-7-6 08:52:41

使用Visual Lisp添加菜单

全部的
 
我想知道使用visual lisp将菜单添加到菜单栏有多困难。我在许多用户的计算机上都有一个企业级CUI,但有几个用户在菜单栏上没有该CUI的菜单。我希望使用Visual Lisp添加菜单,而不是遍历CUI并编辑其工作空间。我知道这应该可以使用InsertInMenuBar和PopupMenu对象实现。我不知道如何进入具体的菜单。
 
有什么建议或解决方案吗?
 
谢谢
马特

Guest kruuger 发表于 2022-7-6 09:21:26

也许是这个。只需编辑列表和扩展名(cui或cuix)
(defun LOADMENU (/ ERR OLDCMD)
(setq OLDCMD (getvar "cmdecho"))
(setvar "cmdecho" 0)
(foreach MenuName (list "Adservco_2010" "Kojacek_2010" "Tools_2010")
   (if (not (menugroup MenuName))
   (if (findfile (strcat MenuName ".cuix"))
       (progn
         (command "_cuiload" MenuName)
         (princ (strcat "\n>> Menu [" MenuName "] loaded."))
       )
       (if (not ERR)
         (setq ERR (strcat "\n- " MenuName))
         (setq ERR (strcat ERR "\n- " MenuName))
       )
   )
   )
)
(if ERR
   (alert (strcat "\nCan't find partial menu:" ERR))
)
(setvar "cmdecho" OLDCMD)
(princ)
)

(LOADMENU)
(princ)

rkmcswain 发表于 2022-7-6 09:30:20

这不包括错误处理,只包括基本内容,但它应该可以帮助您开始。
 

; Get AutoCAD
(setq *acad* (vlax-get-acad-object))
; Get the loaded menugroups
(setq *mgs* (vla-get-Menugroups *acad*))
; Get a particular menugroup
(setq *menu* (vlax-invoke-method *mgs* "Item" 0))
; Get the menus in this menugroup
(setq *pops* (vla-get-menus *menu*))
; Get a particular menu
(setq *pop* (vlax-invoke-method *pops* "Item" 5))
; Insert it
(vla-InsertInMenuBar *pop* 5)

Ahankhah 发表于 2022-7-6 09:38:56

 
代码在前4行中运行良好,但运行这一行时出现问题:
Visual LISP返回此错误消息:
谁知道我的理解或rkmcswain的代码有什么问题? 
P、 在美国,我也尝试了5以外的数字,但没有成功。

rkmcswain 发表于 2022-7-6 10:03:58

一次遍历一行代码,并验证每个变量。
听起来像是什么“砰砰”都没有第5项。
页: [1]
查看完整版本: 使用Visual Lisp添加菜单