Динамически установить значок подменю CommandBar «Popup» - PullRequest
3 голосов
/ 19 января 2011

Я просто пытаюсь подтвердить это: в Office 2003 я хочу создать собственное подменю - то, что на языке CommandBar называется всплывающим окном (msoControlPopup) - во время выполнения и установить для него изображение.С CommandBarButton это очень просто

Set btn1 = mnu.Controls.Add(msoControlButton, temporary:=True)
btn1.Caption = "Btn1"
btn1.Picture = stdole.LoadPicture("C:\temp\test.bmp")

Но с CommandBarPopup или CommandBarControl типа msoControlPopup происходит сбой

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")

Тип msoControlPopup не позволяет .Style свойство, то есть как Office определяет, что отображать - значок, текст, оба - на элементе управления.Я еще не нашел это проверенным, поэтому у меня есть последняя надежда, что я делаю что-то не так, и есть способ вставить значок в подменю во время выполнения.

Спасибоза любой свет, который вы можете пролить.

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Ладно, еще побеги.Я уверен, что ответ на это, это не может быть сделано.И вот мое «доказательство»: ни одно из встроенных подменю не имеет значков (которые я не осознавал до после . Я опубликовал вышеупомянутое, и если вы запустите приведенный выше код, перейдите в Инструменты> Настройка вв строке меню, затем нажмите на меню «Тест», чтобы раскрыть его, и щелкните правой кнопкой мыши на Sub1, вы увидите, что все кнопки и опции стиля выделены серым. Щелкните правой кнопкой мыши на Btn1, и они доступны.

Любые другие мысли все еще приветствуются.

0 голосов
/ 25 мая 2011

Конечно, если вам нужно установить изображение или FaceID заголовка подменю, это не доступный метод для заголовков подменю, но если вы хотите установить изображение или FaceID в самом подменю, я изменил код с здесь , чтобы выполнить это:

 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

Я проверил это, и, похоже, он отлично работает как для FaceID, так и для загруженных изображений.

Конечно, чтобы получить "во время выполнения"влияет, я бы порекомендовал поместить это в функцию, которая вызывается каждый раз, когда пользователь нажимает на определенный элемент управления.

Здесь также могут быть использованы дополнительные переменные изображения.

Надеюсь, это поможет.

...