办公室功能区中的图像可以大(32x32)或小(16x16)。如果将它们指定为大,但窗口太窄而无法容纳它们,则它们会自动变小。默认情况下,这些只是较大图像的压缩版本。
有一份办公设计文档(自消失以来)建议人们应该正确设计小图标,并且它们不应该只是大图标的小版本,因为压缩为16x16并不总是很好。非常明智。
但是实际上有人用XML做到了吗? Button之类的元素似乎只具有一个图像属性。我希望有两个largeImage和smallImage(例如)。
这真的需要可怕的回叫吗?在这种情况下,如何捕捉色带决定调整图像大小的事件? (由于多种原因,丝带回叫与VBA混在一起。)
答案 0 :(得分:2)
Ribbon XML在其定义中没有选择指定大图标和小图标的选项。如果使用image
属性,则只能提供一张图片。
也没有办法知道Office是否/何时减小功能区的大小。您必须进行一些研究,检查哪个窗口宽度触发了调整大小,然后可以使用Application对象的WindowResize
事件使控件无效,更改图片(可能还有控件的大小)
要提供多个图标,您需要使用回调属性getImage
来告诉Ribbon使用哪个图片。这不像传递存储在Office文档中的文件的字符串值那样简单,因为回调函数需要一个IPictureDisp
对象。该图像将需要作为文件存储在Office文档之外。
在本文结尾处的Customizing the 2007 Office Fluent Ribbon for Developers (Part 1 of 3)中描述了使用getImage
的复杂性,但是其中提供的代码是针对.NET Framework的。
使用VBA编写代码实际上要容易一些,因为提供stdOle
的{{1}}库是一个办公库。您需要设置对库的引用-在VBA编辑器的工具/参考中,该库的标签为IPictureDisp
。请注意,这不适用于png图形文件格式-库有点旧...
OLE Automation