我试图将图像添加到TDbgrid上的一列中,该列考虑到了透明度。当从画布上的TImageList在DBGridDrawColumnCell过程中绘制图像时,我需要图像的背景(与左下角的像素相同的颜色)来显示透明度。我希望这个透明区域显示高亮颜色或非高亮颜色,特别是当主题被使用时,例如Aero。我已经能够在旧版本的clHighlight或clWindow的颜色值作为背景色的情况下完成这一任务。但是对于Aero主题,它总是在图像的非透明部分后面画一个框,而不是Aero使用的渐变蓝色高亮颜色。我怎样才能做到这一点?
我相信我应该使用alpha通道,但我不知道如何从一个TImageList到一个画布。我相信,在我开始在单元格的画布上绘制之前,该单元格是完全用实际的高亮颜色绘制的。我只想画出图像的非透明部分,然后离开背景。
发布于 2015-05-18 19:13:48
即使使用了Aero之类的主题,我最终还是能够确定如何以透明的方式在dbgrid上显示图像。
我使用了一个常规的TImageList,并加载了在dbgrid上显示所需的图像。在我的例子中,有两个,它们是图标(ico)格式的。我在DBGridDrawColumnCell过程中使用了以下简单代码,而不是像大多数旧代码所建议的那样,将图像传输到位图,然后将其绘制到dbgrid画布上:
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画布,这将提供所需的透明度。
更新:我尝试了bmp的加载在Timagelist和它也工作。
https://stackoverflow.com/questions/30249557
复制相似问题