Офисная лента больших и маленьких изображений - PullRequest
0 голосов
/ 25 сентября 2018

Изображения на ленте офиса могут быть большими (32x32) или маленькими (16x16).Если они указаны как большие, но окно слишком узкое, чтобы соответствовать им, то они автоматически становятся маленькими.По умолчанию это просто сокращенная версия увеличенного изображения.

Был документ о дизайне офиса (с тех пор как он исчез), в котором предлагалось правильно оформлять маленькие значки и что они не должны быть просто маленькими версиями.из больших, потому что конденсация до 16x16 не всегда работает очень хорошо.Очень разумно.

Но действительно ли это делается в XML?Элементы вроде Button имеют только один атрибут изображения.Я ожидал бы два, largeImage и smallImage (скажем).

Это то, что действительно нуждается в ужасных обратных вызовах?В каком случае, как можно поймать событие, когда лента решила изменить размер изображения?(Обратные вызовы ленты - беспорядок с VBA по нескольким причинам.)

1 Ответ

0 голосов
/ 25 сентября 2018

Лента XML не имеет возможности указывать большие и маленькие значки как часть своего определения.Если вы используете атрибут image, вы можете предоставить только одно изображение.

Также нет способа узнать, уменьшает ли Office размер ленты.Вам нужно будет провести некоторое исследование, проверив, какая ширина окна запускает изменение размера, а затем вы можете использовать событие WindowResize объекта Application, чтобы сделать недействительными элементы управления, изменив изображение (и, возможно, размер элемента управления).

Чтобы предоставить более одного значка, вам потребуется использовать атрибут обратного вызова getImage, чтобы сообщить Ленте, какое изображение использовать.Это не так просто, как передача строкового значения файла, хранящегося в документе Office, поскольку функция обратного вызова ожидает объект IPictureDisp;изображение должно храниться вне документа Office в виде файла.

Сложности использования getImage описаны в Настройка ленты Office Fluent 2007 для разработчиков (часть 1 из 3) , ближе к концу статьи, но предоставленный код есть для .NET Framework.

На самом деле немного проще кодировать с использованием VBA, поскольку библиотека stdOle, предоставляющая IPictureDisp, являетсяофисная библиотека.Вам нужно установить ссылку на библиотеку - в инструментах / справках редактора VBA она помечена как OLE Automation.Обратите внимание, что это не работает с графическим форматом файла png - библиотека немного устарела ...

Public Sub GetIconImage(control As IRibbonControl, ByRef image)     
  Dim sPicPath As String
  Dim stdPic As StdPicture

  sPicPath = "C:\Users\[userName]\Pictures\test.jpg"  'Schweiz.png"
  Set stdPic = stdole.StdFunctions.LoadPicture(sPicPath)
  Set image = stdPic
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...