[英]VBA: How to hide the floating toolbar shown on right clicking on a shape or document area in Microsoft Visio?
[英]How to hide a popup menu item shown for a drawing shape in Microsoft Visio?
在 Visio 中右键单击绘图形状时,我想隐藏弹出菜单中显示的一些项目。
我试过的代码。 没有看到任何变化。
Sub HideVisioMenus()
Dim uiObj As Visio.UIObject
Dim menuSetObj As Visio.MenuSet
Dim menuItemsObj As Visio.menuitems
Dim i As Integer
Set uiObj = Visio.Application.BuiltInMenus
Set menuSetObj = uiObj.MenuSets.ItemAtID(visUIObjSetDrawing)
Set menuItemsObj = menuSetObj.Menus(8).menuitems
'Get the Show ShapeSheet menu item by its CmdNum property.
For i = 0 To menuItemsObj.Count - 1
Debug.Print menuItemsObj.Item(i).Caption
If menuItemsObj(i).CmdNum = visCmdWindowShowShapeSheet Then
menuItemsObj.Item(i).Visible = False
Exit For
End If
Next i
Visio.Application.SetCustomMenus uiObj
End Sub
也许您正在寻找的实际上是禁用开发人员模式? (它在设置中)。 取消选中该选项将从上下文菜单中隐藏“ShapeSheet”命令。 请注意,默认情况下已禁用开发者模式。 您也可以像这样以编程方式将其关闭:
Application.Settings.DeveloperMode = False
仅供参考:还有其他方法,例如通过注册表设置(管理策略)禁用。 我在这里有一个小注释: https://unmanagedvisio.com/disabling-visio-built-in-commands/
您使用的是哪个版本的 Visio? 我一直在摆弄 RibbonUI 很长时间,我忘记了使用 CommandBars 隐藏/删除项目。
老实说,我不记得它是否适用于丝带。 所以我摆弄了一下,它确实有效!
不过,我认为您需要此菜单集 ID:
Visio.visUIObjSetCntx_DrawObjSel
但是,浏览该集合中的项目不会显示 Show ShapeSheet 项目。 因此,Visio 以某种特殊方式添加了该项目。
我摆弄了一些代码,并且能够隐藏除Show ShapeSheet和Hyperlinks之外的所有内容。 不知道如何摆脱那些!
Sub DinkWithRightClickShapeMenu()
'// The following example demonstrates how to retrieve
'// the currently active user interface for your document
'// without replacing the application-level custom user
'// interface, if any.
'// Check if there are document custom menus.
If ThisDocument.CustomMenus Is Nothing Then
'Check if there are Visio custom menus.
If Visio.Application.CustomMenus Is Nothing Then
'Use the built-in menus.
Set visUiObj = Visio.Application.BuiltInMenus
Else
'Use the Visio custom menus.
Set visUiObj = Visio.Application.CustomMenus.Clone
End If
Else
'Use the file custom menus
Set visUiObj = ThisDocument.CustomMenus
End If
Dim menuSetObj As Visio.MenuSet
Dim menuItemsObj As Visio.MenuItems
Dim i As Integer, j As Integer
'// This is the menu set for right-clicking a shape:
Set menuSetObj = visUiObj.MenuSets.ItemAtID(Visio.visUIObjSetCntx_DrawObjSel)
'Set menuSetObj = visUIObj.MenuSets.ItemAtID(Visio.visUIObjSetCntx_BuiltinMenus)
'// List the menu items in the menu set.
'// For Each doesn't work:
Dim mnu As Visio.Menu
Dim mnuItem As Visio.MenuItem
For i = 0 To menuSetObj.Menus.Count - 1
Set mnu = menuSetObj.Menus.Item(i)
Debug.Print "Menu: " & i & ". '" & mnu.Caption & "'"
For j = 0 To mnu.MenuItems.Count - 1
Set mnuItem = mnu.MenuItems(j)
Debug.Print j, mnuItem.Caption
'// Hide every menu item:
mnuItem.Visible = False
'// This was a test to see if I could change the menu text:
'//mnuItem.Caption = mnuItem.Caption & " woohoo"
Debug.Print vbTab & mnuItem.Caption
Next j
Next i
'// Unfortunately, there are still two items left:
'// - Show ShapeSheet
'// - Hyperlinks...
Call Visio.ActiveDocument.SetCustomMenus(visUiObj)
'ThisDocument.SetCustomMenus uiObj
'Call Visio.Application.SetCustomMenus(visUiObj)
'// Restore the normal menus running this in the
'// Immediate window:
'Visio.ActiveDocument.ClearCustomMenus
'// Cleanup:
Set mnuItem = Nothing
Set mnu = Nothing
Set menuSetObj = Nothing
Set visUiObj = Nothing
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.