【发布时间】:2016-03-15 15:22:08
【问题描述】:
使用 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)等等,但没有成功。
我也尝试过在ImageList->GetBitmap(2, Image->Picture->Bitmap) 之后再次显式设置Image->Transparent = True,甚至尝试过
Image->Picture->Bitmap->TransparentColor =
Image->Picture->Bitmap->Canvas->Pixels[0][0]
没有明显的效果。
你的想法?
【问题讨论】:
-
您需要带有 Alpha 通道的原始字形。渲染后的屏幕截图为时已晚。
-
您是否尝试过手动修改图像并在图像左上角插入
clFuchsia色的一个像素? -
@Wodzu 这无济于事,因为这些图像依赖于部分 alpha 级别才能看起来不错
-
您可以尝试使用
DrawThemeBackground方法通过TDLG_EXPANDOBUTTON部分和有效状态之一(TDLGEBS_NORMAL、TDLGEBS_HOVER、TDLGEBS_PRESSED等) -
我明白了...感谢 cmets !知道这个字形是否可以在 W7 系统上找到,在哪里? @RRUZ,似乎仅限于 Vista 及更高版本,而我遇到的问题是 XP
标签: delphi c++builder