3

我正在尝试将图像添加到考虑透明度的 TDbgrid 列中。在 DBGridDrawColumnCell 过程中从画布上的 TImageList 绘制图像时,我需要图像的背景(与左下角的像素颜色相同)具有透明度。我希望这个透明区域显示高亮颜色或非高亮颜色,尤其是在使用主题时,例如 Aero。我已经能够在旧版本的 Windows 中使用 clHighlight 或 clWindow 作为背景颜色的颜色值来完成此操作。但是对于 Aero 主题,它总是在图像的不透明部分后面绘制一个框,而不是 Aero 使用的渐变蓝色突出显示颜色。我怎样才能做到这一点?

我相信我应该使用 alpha 通道,但我不确定如何从 TImageList 到画布执行此操作。我相信在我开始在单元格的画布上绘制之前,单元格已完全用实际的突出显示颜色绘制。我只想绘制图像的非透明部分并留下背景。

4

1 回答 1

1

即使使用了 Aero 等主题,我终于能够确定如何在具有透明度的 dbgrid 上显示图像。

我使用了一个常规的 TImageList 并加载了我需要在 dbgrid 上显示的图像。就我而言,有两个,它们是图标(ico)格式。我没有像大多数旧代码推荐的那样将图像传输到位图然后将其绘制到 dbgrid 画布上,而是在 DBGridDrawColumnCell 过程中简单地使用了以下简单代码:

if DataCol=0 then
begin
     if (MApptsConflict.Value='<none>') then
         ImageIndex := 0
     else
         ImageIndex := 1;

     ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left+2,Rect.Top+2,ImageIndex,True);
end; 

这将从 TImageList 直接绘制到 dbgrid 画布,这将提供所需的透明度。

更新:我在 Timagelist 中加载了 bmp 进行了尝试,它也可以正常工作。

于 2015-05-18T19:13:48.727 回答