VCL TImage + TImageList,透明功能不起作用或我做错了什么?

时间:2015-12-10 05:25:38

标签: delphi c++builder

使用Borland C ++ Builder 2009

我从W7 Windows对话框中截取了三个按钮并将它们放在TImageList中。在适当的时候,我在TImage中加载3个变体。

Image->Picture->Bitmap = NULL ; // Clear previous state
ImageList->GetBitmap(2, Image->Picture->Bitmap) ;

PS:Image->Transparent = True

在Windows 7和Windows 10上,这似乎可以正常工作。 但我刚刚意识到,只是因为放置了TImage的TForm具有完全相同的背景color。 (在我将背景改为石灰后确认不起作用)

在Windows XP上,按钮看起来不那么好。由于XP似乎有不同的背景颜色。请注意,它也是clBtnFace

XP:XP 。 。 。 Windows 7:Windows 7

我还尝试设置TImageList控件的BlendColorDrawingStyle,并结合Image->Transparent = truefalse

但我无法让它发挥作用。

我在W7上捕获了Image->Picture->Bitmap->Canvas->Pixels[0][0]值并将其放入ImageList->BlendColorImageList->DrawingStyle = dsFocusdsSelected)等等,但没有成功。

我还尝试在Image->Transparent = True之后再次明确设置ImageList->GetBitmap(2, Image->Picture->Bitmap),甚至尝试

Image->Picture->Bitmap->TransparentColor =
Image->Picture->Bitmap->Canvas->Pixels[0][0]

没有明显效果。

你的想法?

1 个答案:

答案 0 :(得分:4)

我如何在评论中说,而不是从屏幕捕获图像,您可以尝试使用DrawThemeBackground方法绘制展开按钮,传递TDLG_EXPANDOBUTTON部分和其中一个有效状态({{1 },TDLGEBS_NORMALTDLGEBS_HOVER等)。对于Windows XP,您可以使用TDLGEBS_PRESSED部分和其中一种状态(EBP_NORMALGROUPEXPANDEBHC_NORMALEBHC_HOT

检查在TImage中绘制 expando按钮的样本。

EBHC_PRESSED