Définir une icône sous-menu CommandBar « Popup » dynamiquement
-
12-10-2019 - |
Question
Je suis juste essayer de le confirmer: Dans Office 2003, je veux créer un sous-menu personnalisé - ce qui est connu dans le langage CommandBar dans une fenêtre contextuelle (msoControlPopup) - lors de l'exécution, et définir une image pour elle. Avec un CommandBarButton, ce qui est très simple
Set btn1 = mnu.Controls.Add(msoControlButton, temporary:=True)
btn1.Caption = "Btn1"
btn1.Picture = stdole.LoadPicture("C:\temp\test.bmp")
Mais avec un CommandBarPopup ou CommandBarControl de type msoControlPopup, il échoue
Set sub1 = mnu.Controls.Add(msoControlPopup, temporary:=True)
sub1.Caption = "Sub1"
'object doesn't support this property or method for next line
sub1.Picture = stdole.LoadPicture("C:\temp\test.bmp")
Le type de msoControlPopup ne semble pas permettre une propriété .Style
soit, ce qui est de savoir comment Bureau détermine pour montrer - icône, texte, à la fois - sur le contrôle. Je ne l'ai pas trouvé cela encore prouvé, si je suis maintenant un dernier espoir que je fais quelque chose de mal, et il est, en fait, un moyen d'insérer une icône dans un sous-menu à l'exécution.
Merci pour toute lumière que vous pouvez jeter.
La solution
Ok bien plus amarantes. Je suis sûr que la réponse à cette question est, il ne peut pas être fait. Et voici ma « preuve »: Aucun des sous-menus intégré des icônes (que je ne savais pas jusqu'à ce que après Je posté ci-dessus, et si vous exécutez le code ci-dessus, allez dans Outils> Personnaliser dans la barre de menu, puis cliquez sur le menu test pour laisser tomber vers le bas, et un clic droit sur Sub1, vous devriez voir toutes les options de bouton et le style grisés. Faites un clic droit sur bTN1, et ils sont disponibles.
Les autres pensées toujours les bienvenus.
Autres conseils
Bien sûr, si vous devez définir l'image ou FaceID de la rubrique du sous-menu, qui n'est pas une méthode disponible pour les titres du sous-menu, mais si vous souhaitez définir l'image ou FaceID le sous-menu lui-même, j'ai modifié le code ici pour y parvenir:
Public Sub newSubMenu()
Dim menuBar As CommandBar
Dim newMenu As CommandBarControl
Dim menuItem As CommandBarControl
Dim subMenuItem As CommandBarControl
CommandBars("Sub Menu Bar").Delete
Set menuBar = CommandBars.Add(menuBar:=False, Position:=msoBarPopup, Name:="Sub Menu Bar", Temporary:=True)
Set newMenu = menuBar.Controls.Add(Type:=msoControlPopup)
newMenu.Caption = "&First Menu"
Set newMenu = menuBar.Controls.Add(Type:=msoControlPopup)
newMenu.Caption = "&Second Menu"
Set newMenu = menuBar.Controls.Add(Type:=msoControlPopup)
newMenu.Caption = "&Third Menu"
Set menuItem = newMenu.Controls.Add(Type:=msoControlButton)
With menuItem
.Caption = "F&irst Sub"
.FaceId = "356"
.OnAction = "myTest"
End With
Set menuItem = newMenu.Controls.Add(Type:=msoControlButton)
With menuItem
.Caption = "S&econd Sub"
.FaceId = "333"
.OnAction = "otherTest"
End With
Set menuItem = newMenu.Controls.Add(Type:=msoControlPopup)
menuItem.Caption = "Sub Menus"
Set subMenuItem = menuItem.Controls.Add(Type:=msoControlButton)
With subMenuItem
.Caption = "Item 1"
.FaceId = 321
.OnAction = "firstMacro"
End With
Set subMenuItem = menuItem.Controls.Add(Type:=msoControlButton)
With subMenuItem
.Caption = "Item 2"
'.FaceId = 432
.Picture = stdole.StdFunctions.LoadPicture("C:\temp\test.bmp")
.OnAction = "secondMacro"
End With
CommandBars("Sub Menu Bar").ShowPopup
End Sub
J'ai testé cela et il semble fonctionner très bien pour les deux FaceID et de photos chargées.
Bien sûr, pour obtenir le « temps à courir » affect, je recommande de placer cela dans une fonction qui a été appelé à chaque fois que l'utilisateur a cliqué sur un contrôle spécifique.
Il pourrait encore être à la variable poignée dépensa images ici.
Hope this helps.