使用样式时,工具栏上图像列表的位图会以意想不到的方式被屏蔽

When using styles, bitmaps of imagelists on toolbars get masked in an unexpected way

描述:

我正在使用 PNG 加载的图像列表来允许我的菜单和速度按钮透明。 还使用运行时主题来允许用户定义 GUI 体验。

如果没有选择样式,a.k.a。 "Windows" 样式,为我的工具栏生成了漂亮的蒙版,一切都按预期进行。但是,当我激活一种样式(无论是哪种样式)时,会执行一个非常奇怪的蒙版渲染,其中一些按钮在禁用时显示为空(第一个和前一个按钮),而一些(post 和取消按钮) 实际上确实显示了原始图像的最小蒙版。

研究: 我已经创建了一个 VCL 样式测试应用程序,并且正在窥探 VCL 以找出绘图过程的确切过程。 我在这里对 SO 的研究伴随着这个 more or less related topic,但 id dint 确实有助于解决我的问题。

与此同时,我可以想象其他人已经进入了这个并且可以指出正确的方向。

问题:

我正在寻找一种方法来正确显示或自动生成这些掩码(如 link),即使在使用 VCL 样式时也能按预期工作。这可以通过在我的图像列表中自动创建蒙版,或者最好通过更改为样式自定义绘图生成蒙版的行为来实现。

标准样式显示工具栏很好:

使用自定义样式,按钮上没有图像:

另一种自定义样式,你甚至会错过按钮

顺便说一句:"Dont use styles" 不是我要找的答案。

事实证明,有一个未记录的 属性 Vcl.Controls.TImageList.GrayscaleFactor

如果其中除 0 以外的任何内容,则在使用样式时图像会以灰色方式正确呈现。

灰度因子本身似乎对生成的禁用按钮的 "darkness" 有影响。默认值为 0,这会产生上述问题中的行为。如果没有运行时主题处于活动状态,Grayscalefactor 似乎无效。

就我个人而言,如果 GrayscaleFactor 也会影响透明度,我会更喜欢它,这样按钮看起来会更 "ghosted" 而不是 "grayed"。灰色可能不适用于所有主题...想象一个 "grey" 主题 :)

低于 TImageList.Grayscalefactor 对 windows 10 蓝色主题的影响。

灰度系数=1

灰度系数=128

GrayScaleFactor=255(最大允许值)