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

时间:2018-06-15 13:44:34

标签: delphi transparency vcl timagelist

说明

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

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

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

与此同时,我可以想象其他人已经陷入困境,可以指引我朝着这个方向前进。

问题:

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

标准样式显示工具栏正常: Standard style shows toolbar fine

使用自定义样式,按钮上没有图像: using custom style, no images on buttons

另一种自定义样式,你甚至会错过按钮 Another custom style, and you will even miss the buttons

顺便说一下:“不要使用风格”不是我要找的答案。

1 个答案:

答案 0 :(得分:1)

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

如果有0以外的任何东西,那么当使用样式时,图像会以灰色方式正确呈现。

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

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

下面是TImageList.Grayscalefactor对windows 10蓝色主题的影响。

GrayScaleFactor = 1 GrayScaleFactor=1

GrayScaleFactor = 128 GrayScaleFactor=128

GrayScaleFactor = 255(允许的最大值) GrayScaleFactor=255 (maximum allowed value)