使用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
我还尝试设置TImageList控件的BlendColor
和DrawingStyle
,并结合Image->Transparent = true
或false
。
但我无法让它发挥作用。
我在W7上捕获了Image->Picture->Bitmap->Canvas->Pixels[0][0]
值并将其放入ImageList->BlendColor
(ImageList->DrawingStyle = dsFocus
或dsSelected
)等等,但没有成功。
我还尝试在Image->Transparent = True
之后再次明确设置ImageList->GetBitmap(2, Image->Picture->Bitmap)
,甚至尝试
Image->Picture->Bitmap->TransparentColor =
Image->Picture->Bitmap->Canvas->Pixels[0][0]
没有明显效果。
你的想法?
答案 0 :(得分:4)
我如何在评论中说,而不是从屏幕捕获图像,您可以尝试使用DrawThemeBackground
方法绘制展开按钮,传递TDLG_EXPANDOBUTTON
部分和其中一个有效状态({{1 },TDLGEBS_NORMAL
,TDLGEBS_HOVER
等)。对于Windows XP,您可以使用TDLGEBS_PRESSED
部分和其中一种状态(EBP_NORMALGROUPEXPAND
,EBHC_NORMAL
,EBHC_HOT
)
检查在TImage中绘制 expando按钮的样本。
EBHC_PRESSED