Установить прозрачный значок с RibbonX API в Excel не работает - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь установить прозрачный значок для моей надстройки Excel с помощью RibbonX API. Это мой XML:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="gui_LoadImage">
  <ribbon>
    <tabs>
      <tab id="CBtab" label="2019CBMaster">
        <group id="visualizationGroup" label="Visualization">
          <button id="btnHistogram" label ="Press here" enabled="true" screentip="Press and see how magic happens" image="icn_btnHistogram.jpg" size="large"/>
        </group>
        <group id="NewGroup" label="2019NewGroup" >
          <box id="bxBo">
            <button id="btnNew" label="Press" image="icn_btnHisto.jpg" size="large"/>
            <menu id="mnMenu" image="btn_img_random.jpg">

            </menu>
          </box>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

это подпрограмма, которая устанавливает картинку: для моих целей тестирования она игнорирует параметры xml и просто загружает «фиксированную» картинку:

Sub gui_LoadImage(ImageName As String, ByRef Image)

        Set Image = stdole.LoadPicture("C:\Office 2010 Developer Resources\icons\gg.ico")

End Sub

Я сохранил gg.ico в GIMP как 24 bpp и 1 битный альфа-файл ico. Я также пробовал внешние ico-ы, и они тоже не отображались.

Как вы уже поняли выше, значки не отображаются так, как если бы они были полностью прозрачными.

Не могли бы вы помочь?

Кроме того, этот API-интерфейс RibbonX все еще поддерживается? Мне интересно, потому что мне трудно делать довольно простые вещи, и я почти не могу найти документацию. Если нет, то каковы современные рамки для разработки надстроек Excel с настраиваемыми лентами?

Спасибо.

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Пользовательские значки пользовательского интерфейса ленты могут быть прозрачными. Я считаю, что они должны быть .png файлами. Ниже приведена подробная информация о настройках значка ленты пользовательского интерфейса, включая прозрачные фоны.

https://docs.microsoft.com/en-us/office/dev/add-ins/design/add-in-icons

ПЕРЕСМОТР

В редакторе пользовательского интерфейса вы можете импортировать файлы изображений, а затем просто ссылаться на имена файлов в коде XML. Я считаю, что тип файла и то, имеет ли само изображение прозрачный фон, определяет, будет ли оно прозрачным на ленте. Вот как будет выглядеть XML. <button id="customButton1" label="Label 1" size="large" onAction="Macro1" image="picture1" /> 1009 *

Просматривая ваш XML-код, я вижу, что у вас есть расширение файла, включенное в изображения. Я не включаю расширения файлов с моими собственными значками изображений. В редакторе настраиваемого пользовательского интерфейса, который я связал, вы можете добавить импорт файла изображения, который появится на боковой панели, а затем указать ссылку только на имя файла в XML (без расширения файла). Я также считаю, что сам тип файла и имеет ли изображение на самом деле прозрачный фон, который определяет, будет ли оно прозрачным на ленте. JPG-файлы не могут быть прозрачными, так что это может быть вашей проблемой прямо сейчас. Если ваш редактор пользовательского интерфейса не может вместить файлы PNG, попробуйте использовать GIF. Иконки такие маленькие; Качество изображения не должно быть проблемой.

Вот пример:

<splitButton id="splitButton2" size="large" >   
<button id="InsertTools" label="Insert" image="InsertTools_Transparent" />  
<menu id="menu2">   
<button id="buttonInsertMultiSheets" onAction="ModRibbon.Run_InsertMultipleSheets" label="Insert Multiple Sheets" screentip="Add multiple worksheets at one time.  An input box will appear for you to enter the number of sheets to be added."  image="WorksheetAddMultipleSheets" />  
</menu> 
</splitButton>

Вот некоторые из моих личных заметок, когда я учился, которые могут или не могут быть полезны для вас.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <backstage>
        <button id="MyCustomButton1" label="My Macro"
        imageMso="HappyFace" isDefinitive="true" onAction="ModRibbon.Run_Macro1"/>
        <!-- 'button id' each must be unique -->
        <!-- 'My Macro' is the text that will appear on your button -->
        <!-- Use 'imageMso' or 'image' to include a picture on your button. -->
        <!-- 'imageMso' uses built-in Office images; do not insert into this file as icons. -->
        <!-- 'image' uses your own image as your button's icon.  Insert it into this file as an icon. -->
        <!-- 'HappyFace' is the name of the built-in Office image (for custom images, enter the file name). -->
        <!-- 'ModRibbon' is the name of the VBA module in which you will paste this call-back sub.  You can name this anything. -->
        <!-- 'Run_' is a custom prefix added to the macro name, so you don't have to rename your macros. -->
        <!-- 'Macro1' is the macro that should be run when the button is clicked. -->

    </backstage>
</customUI>

В редакторе Custom UI, который я использую, обратный вызов будет:

'Callback for buttonInsertMultiSheets onAction
Sub Run_InsertMultipleSheets(control As IRibbonControl)
End Sub

Судя по вашему коду, вам также нужен вызов для загрузки изображения, поэтому элемент управления customUI имеет два обратных вызова:

Sub LoadImage (imageID As String, ByRef image)

Sub OnLoad(ribbon As IRibbonUI)

Если у вас также есть [Content_Types] .xml, то типом по умолчанию является PNG, и вам нужно добавить строку в самом конце файла, но перед этим, а затем сохранить изменения.

<Default Extension="jpg" ContentType="application/octet-stream"/>
0 голосов
/ 13 июня 2019

Рекомендуемый формат файлов для значков в интерфейсе ленты - PNG. Ленты и панели инструментов Microsoft Office поддерживают файлы ICO, BMP и ICO. Итак, я бы предложил преобразовать ваши макросы VBA в надстройку COM, где вы можете легко загружать такие образы.

Может оказаться полезной статья Графические форматы для надстроек Microsoft Office . Пользовательский интерфейс Fluent подробно описан в следующих статьях:

...