自定义菜单显示
自定义的菜单有时不显示,必须用menload加载一下,加载后已加载的自定义里还有这个菜单.mns文件,必须删除后在重新加载一次才显示菜单,关闭后又不显示了。这个问题怎么才能解决,各位大佬。{:1_1:}自定义菜单项和工具栏
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=188657&fromuid=202795
(出处: 明经CAD社区)
用这个直接收拾,不做mns文件,不知道能不能满足楼主的需求 本帖最后由 尘缘一生 于 2025-1-6 19:10 编辑
这个问题,和CAD版本有关系。
2010版以后啊,CAD实际使用的是CUIX菜单,也就是这个起作用,
那么,这个是CAD,读取MNS MNU自动形成的,
这个CUIX哪,也就是个压缩文件,如果把后缀CUIX改为ZIP,即可解压。
这个CUIX里面是包含了图标什么的了的。
也就是说,如果你的工具啊,形成了正确的CUIX了,其他(MNU,MNS,图标库SLB或一个个*.BMP图标)是可以完全删除不用的,
因此:
如果你想每次都完美的话,那就是,程序机理,每次都删除CUIX,MNU或MNS等,用程序生成一遍MNU,MNS再->加载->形成CUIX-->go。虽然重复了一遍,占用启动时间,但可以彻底杜绝问题。
如果你每次启动,不是从MUS-->CUIX作,采用卸载,再加载的办法,是不 能做到完全奏效的。原因不在CAD本身,在于插件加载上,指的事,你可能加载有其他插件或多个插件的时候,在下拉菜单,图标菜单上,有位置重叠啥的时候。况且,还有其他插件的CUIX菜单的吗,还有先后那个插件为先的顺序关系的吗。
下面展示SLdesignV3.0 菜单系统一部分
;;======【SLdesign V3.0 菜单系统开始】========
;;隐藏三领----(一级)------
(defun c:slg (/ ofa)
(setq ofa (getvar "FILEDIA"))
(setvar "FILEDIA" 0)
(if (menugroup "SLMENU")
(command "MENUUNLOAD" "SLMENU")
)
(setvar "FILEDIA" ofa)
)
;;显示三领----(一级)------
(defun c:slk ()
(menu00)
)
;;删除菜单----(一级)------
(defun delmenu ()
(sl:del-fil (strcat sl-path0 "\\" "SLMENU.cuix"))
(sl:del-fil (strcat sl-path0 "\\" "SLMENU.bak.cuix"))
(sl:del-fil (strcat sl-path0 "\\" "SLMENU.mns"))
(sl:del-fil (strcat sl-path0 "\\" "SLMENU.mnr"))
(sl:del-fil (strcat sl-path0 "\\" "SLMENU_light.mnr"))
)
;;菜单显示程序----(一级)------
(defun slmenuk (/ i menuk k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 s1)
(setq
k1 (slmsg "下拉MENU" "┰MENU" "downMENU")
k2 (slmsg "图标菜单" "瓜夹垫虫" "IconMenu")
k3 (slmsg "展开" "甶秨" "open")
k4 (slmsg "开" "秨" "open")
k5 (slmsg "关" "闽" "close")
k6 (slmsg "SL-绘制" "SL-酶籹" "SL-draw")
k7 (slmsg "SL-钢筋" "SL-葵惮" "SL-steelbar")
k8 (slmsg "SL-查询-缩放" "SL-琩高-罽" "SL-query-zoom")
k9 (slmsg "SL-编辑" "SL-絪胯" "SL-edit")
k10 (slmsg "SL-常用" "SL-盽ノ" "SL-Common")
k11 (slmsg "SL-文件" "SL-ゅン" "SL-file")
)
(setq menuk (readkey (strcat sl-path0 "\\" "main.ini") k2))
(command "-toolbar" k11 "S")
(if (or (= menuk nil) (= menuk k4))
(progn
(rwritekey (strcat sl-path0 "\\" "main.ini") k2 k4)
(command "-toolbar" k6 "S") ; 显示工具栏
(command "-toolbar" k7 "S")
(command "-toolbar" k8 "S")
(command "-toolbar" k9 "S")
(command "-toolbar" k10 "S")
)
(progn
(rwritekey (strcat sl-path0 "\\" "main.ini") k2 k5)
(command "-toolbar" k6 "H")
(command "-toolbar" k7 "H")
(command "-toolbar" k8 "H")
(command "-toolbar" k9 "H")
(command "-toolbar" k10 "H")
)
)
(setq s1 (readkey (strcat sl-path0 "\\" "main.ini") k1))
(if (or (= s1 nil) (= s1 k3))
(progn
(setq s1 k3)
(rwritekey (strcat sl-path0 "\\" "main.ini") k1 k3)
)
)
(if (>= (setq i (vla-get-count (vla-get-menubar *Acad*))) 16) (setq i 16))
(if (= s1 k3) ;展开
(progn
(menucmd (strcat "p" (itoa (1+ i)) "=+SLMENU.POP1"))
(menucmd (strcat "p" (itoa (+ i 2)) "=+SLMENU.POP2"))
(menucmd (strcat "p" (itoa (+ i 3)) "=+SLMENU.POP3"))
(menucmd (strcat "p" (itoa (+ i 4)) "=+SLMENU.POP4"))
(menucmd (strcat "p" (itoa (+ i 5)) "=+SLMENU.POP5"))
(menucmd (strcat "p" (itoa (+ i 6)) "=+SLMENU.POP6"))
(menucmd (strcat "p" (itoa (+ i 7)) "=+SLMENU.POP7"))
(menucmd (strcat "p" (itoa (+ i 8)) "=+SLMENU.POP8"))
)
(menucmd (strcat "p" (itoa (1+ i)) "=+SLMENU.POP1"))
)
)
;;下拉菜单开关--k: t 展开 nil 合并----(一级)----
(defun showxlmenu (k / k1 k2 k3)
(setq
k1 (slmsg "下拉MENU" "┰MENU" "downMENU")
k2 (slmsg "展开" "甶秨" "open")
k3 (slmsg "合并" "" "close")
)
(if (= k t)
(rwritekey (strcat sl-path0 "\\" "main.ini") k1 k2)
(rwritekey (strcat sl-path0 "\\" "main.ini") k1 k3)
)
(menu00)
)
;;图标菜单开关-----(一级)------
;;kt 开 nil 关
(defun opmenu (k / k1 k2 k3)
(setq
k1 (slmsg "图标菜单" "瓜夹垫虫" "IconMenu")
k2 (slmsg "开" "秨" "open")
k3 (slmsg "关" "闽" "close")
)
(if (= k t)
(rwritekey (strcat sl-path0 "\\" "main.ini") k1 k2)
(rwritekey (strcat sl-path0 "\\" "main.ini") k1 k3)
)
(menu00)
)
;;专业设置--k: t 建筑 nil 机械----(一级)----
(defun showzymenu (k / k1 k2 k3)
(setq
k1 (slmsg "专业" "盡穨" "major")
k2 (slmsg "建筑" "縱" "Architecture")
k3 (slmsg "机械" "诀瘪" "Mechanical")
)
(if (= k t)
(rwritekey (strcat sl-path0 "\\" "main.ini") k1 k2)
(rwritekey (strcat sl-path0 "\\" "main.ini") k1 k3)
)
(menu00)
)
;;加载菜单,这就是初始0机加载要的部分------
(defun menu00 (/ ofa)
(setq ofa (getvar "FILEDIA"))
(setvar "FILEDIA" 0)
(if (menugroup "SLMENU")
(command "MENUUNLOAD" "SLMENU")
)
(delmenu) ;需要删除---注意此操作,这就是确保再重新生成
(cond
((= $Lgver 1); (/= (getcname "sascl") nil)) ;;CAD是简体中文版包括浩辰中望
(load (strcat sl-path0 "\\" "Support" "\\" "slmenu-bz.VLX"));三领注,调用的简体版本菜单子程序,作用,生成简体版的MNS
)
((= $Lgver 2) ;繁体版
(load (strcat sl-path0 "\\" "Support" "\\" "slmenu-ft.VLX"))
)
((= $Lgver 3) ;英文版
(load (strcat sl-path0 "\\" "Support" "\\" "slmenu-en.VLX"))
)
)
(command "MENULOAD" (strcat sl-path0 "\\" "SLMENU.mns")) ;加载它
(slmenuk) ;菜单显示, 此处确保显示正确
(setvar "FILEDIA" ofa)
)
这是我在论坛参照别人的自定义菜单,完善了一下,加载没问题
感谢分享感谢分享 菜单有24个的限制,多了就不好玩了。
页:
[1]