MarcoW 发表于 2022-7-6 14:36:41

如何加载/卸载菜单'

关于菜单。。。
我想创建/拥有一个名为“选项”的菜单,比如说在快捷菜单旁边。其中一个功能必须是加载或卸载第二个菜单,可以说其中一个菜单被称为“test”。
两个菜单(test.mnu和options.mnu)都保存在右侧的支持文件搜索路径文件夹中。所以我开始正确的道路…
这是菜单“选项”(在acad启动时加载)的外观:
***menugroup=选项
***POP1
[->加载或卸载其他菜单]
[测试]^C^Cmenuload;测验
[测试“关闭”]^C^Cmenuunload;测验
[~
当执行“测试关闭”命令时,它工作正常,菜单显示,当在命令栏上输入命令“菜单加载”时,对话框不显示称为“测试”的菜单。
当执行“Test On”命令时,它不能正常工作:菜单不显示。但是:在命令栏上输入命令“menuload”时,对话框显示已加载菜单“test”。我无法输入第二个命令或按Button键来加载菜单。手动卸载加载的菜单,然后在对话框中手动加载时,菜单确实会显示。
哪里出了问题??
谢谢你帮我。

rkmcswain 发表于 2022-7-6 14:42:27

加载菜单和下拉显示是两种不同的操作。
 
我们有一个lisp例程来实现这一点,它的工作原理是这样的。
1、查看菜单是否加载。
2、如果没有,则加载。
3.找出下拉列表是否可见(请记住,如果1的答案是“是”,则下拉列表可能已经可见)
4.如果没有,则使其可见。
 
查看vla-*菜单*功能

MarcoW 发表于 2022-7-6 14:45:02

 
感谢您的回复。
是的,你是对的,两个不同的东西,但没有看到他们这样。。。
 
“查看vla-*菜单*功能”是什么意思?
 
你没有这段代码和我分享吗?

rkmcswain 发表于 2022-7-6 14:47:17

 
与过滤器vla-*菜单匹配的Lisp函数*
这些是你需要做的你想做的。。。
 
 
 
对不起,代码不是我的,我不想分享。

MarcoW 发表于 2022-7-6 14:52:13

有人能给我解释一下“rkmcswain”是什么意思吗?或者,如果可以的话,你愿意吗?
 
这:看vla-*菜单*功能是什么,是不明白的。好的,我是达奇。。。
 
非常感谢。

wizman 发表于 2022-7-6 14:52:56

我以前使用过menu,也注意到了你的问题,所以我最终编写了一个加载菜单的例程,并确保它在菜单栏中可见,就像rkmcswain建议的那样。
 
您可以尝试使用loadit lisp并将其与宏链接:
http://www.cadtutor.net/forum/showthread.php?t=26379
 
我可以推荐的另一件事是将其设置为开/关的切换,而不是将其放在下拉菜单中的两行上。

MarcoW 发表于 2022-7-6 14:56:37

我得到错误代码。。。这就是我所做的:
 

(defun c:loadit (/ cui_database mnbar flag)
(vl-load-com)
(setq cui_database
(list
   "options"   ;<<< MENUGROUP
   "options.mnu" ;<<<PATH & CUI FILENAME
   "options"   ;<<< MENUNAME
) ;_ end_list
) ;_ end_setq
(vlax-for n
      (setq all_menus
      (vla-get-MenuGroups
      (vlax-get-Acad-Object)
      ) ;_ end_vla-get-MenuGroups
      ) ;_ end_setq
   (if (= (vla-get-name n) (car cui_database))
   (setq flag T)
   ) ;_ end_if
) ;_ end_vlax-for
(if (null flag)
   (progn
   (vla-load
all_menus
(cadr cui_database)
   ) ;_ end_vla-load
   (setq MnBar
   (vla-get-MenuBar
       (vlax-get-Acad-Object)
   ) ;_ end_vla-get-MenuBar
   ) ;_ end_setq
   (vla-InsertInMenuBar
(vla-Item
(vla-get-Menus
    (vla-Item
      (vla-get-MenuGroups
(vlax-get-Acad-Object)
      ) ;_ end_vla-get-MenuGroups
      (car cui_database)
    ) ;_ end_vla-Item
) ;_ end_vla-get-Menus
(caddr cui_database)
) ;_ end_vla-Item
(1- (vla-get-Count MnBar))
   ) ;_ end_vla-InsertInMenuBar
   ) ;_ end_progn
   (princ "\n>>..MENU IS ALREADY LOADED..<<")
) ;_ end_if
(princ)
) ;_ end_defun

 
我该如何运行它?我知道如何让lisp运行,这不是lisp?
当我的菜单名为“选项”时,它是否如上面更改的那样正确?
Pff。。。我会赢的!!

wizman 发表于 2022-7-6 15:01:57

这是LISP,但它们是子函数,因此需要从带有参数的主函数调用

MarcoW 发表于 2022-7-6 15:04:36

我认为Lisp程序已经被篡改,其中一些部分错误/缺失:
 

(defun c:loadit (/ cui_database mnbar flag)
(vl-load-com)
(setq cui_database
(list
"options" ;<<< MENUGROUP
"options.mnu" ;<<<PATH & CUI FILENAME
"options" ;<<< MENUNAME
) ;_ end_list
) ;_ end_setq
(vlax-for n
(setq all_menus
(vla-get-MenuGroups
(vlax-get-Acad-Object)
) ;_ end_vla-get-MenuGroups
) ;_ end_setq
(if (= (vla-get-name n) (car cui_database))
(setq flag T)
) ;_ end_if
) ;_ end_vlax-for
(if (null flag)
(progn
(vla-load
all_menus
(cadr cui_database)
) ;_ end_vla-load
(setq MnBar
(vla-get-MenuBar
(vlax-get-Acad-Object)
) ;_ end_vla-get-MenuBar
) ;_ end_setq
(vla-InsertInMenuBar
(vla-Item
(vla-get-Menus
(vla-Item
(vla-get-MenuGroups
(vlax-get-Acad-Object)
) ;_ end_vla-get-MenuGroups
(car cui_database)
) ;_ end_vla-Item
) ;_ end_vla-get-Menus
(caddr cui_database)
) ;_ end_vla-Item
(1- (vla-get-Count MnBar))
) ;_ end_vla-InsertInMenuBar
) ;_ end_progn
(princ "\n>>..MENU IS ALREADY LOADED..<<")
) ;_ end_if
(princ)
) ;_ end_defun

 
 
这是我第一眼看到的,但还没来得及看清楚。

wizman 发表于 2022-7-6 15:06:57

嗨,李,谢谢你的帮助。
是的,lisp现在运行,但问题仍然没有解决。
啊。。。
 
命令行:菜单加载[输入]
命令行:浏览[输入]
浏览到所需的。mnu文件[打开]
然后按“加载”按钮加载浏览的文件。
通过这种方式,它是可见的,而不是通过lisproutine,尽管它已加载。
 
打败了我。
 
我应该考虑“顺其自然”吗?
页: [1] 2
查看完整版本: 如何加载/卸载菜单'