Mas*_*ler 6 delphi vcl alphablending delphi-xe4
我有一个TSpeedButton,并且有一个TImageList包含各种字形.其中一个有一个alpha通道,当它被绘制到UI的某些部分时看起来非常好......但是当在a上绘制该字形时TSpeedButton,它不会使alpha通道生效.
查看相关代码TButtonGlyph.DrawButtonGlyph,它将被传递true给Transparent参数,但Transparent在if FThemesEnabled代码路径中根本没有考虑; 它只在else部分引用.由于此程序启用了主题,这是否意味着无法将alpha混合图像绘制为TSpeedButton?
有什么方法可以解决这个问题吗?
编辑:更仔细地看一下,它似乎需要考虑透明度......有点儿.完全透明的像素根本不会被绘制,这是正确的行为.但是边缘周围的抗锯齿(部分透明)被绘制为完全不透明.
从我所看到的,TSpeedButton获取您的位图并将其添加到图像列表.这是FGlyphList在私人部分TButtonGlyph.该图像列表具有ColorDepth的cdDeviceDependent.如果您希望尊重Alpha透明度ColorDepth,cd32Bit则需要该图像列表.所以就在那里解释了这些文物.
我不确定你是如何解决这个问题的.我认为我个人TButtonGlyph将其子类化并直接连接到您选择的图像列表.然后TButtonGlyph.DrawButtonGlyph使用从图像列表中绘制的代码替换.我相信你能够编制代码.
但是没有简单的解决方法.如果cdDeviceDependent不对VCL进行重大修改,那么该图像列表将会被使用,并且没有简单的方法可以改变它.我看不到明显的快速解决方案.
实际上,我会做的就是使用TButton,但那只是我.
关于Transparent速度按钮的属性,文档说:
指定按钮的背景是否透明.
使用"透明"指定按钮的背景是否透明.
仅当TSpeedButton的Flat属性设置为True时,此属性才有效.
启用Windows主题时,"透明"属性无法使按钮背景透明.
也就是说,该属性会影响按钮背景,对于平面按钮,未经训练时,与绘制字形无关.
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |