如何在 delphi 中的 TDbgrid 列中添加具有透明度的图像?
How to add an image with transparency to a TDbgrid column in delphi?
我正在尝试将图像添加到考虑了透明度的 TDbgrid 的列中。当在 DBGridDrawColumnCell 过程中从 canvas 上的 TImageList 绘制图像时,我需要图像的背景(与左下角像素相同的颜色)呈现透明。我希望这个透明区域显示高亮颜色或非高亮颜色,尤其是在使用主题时,例如Aero。我已经能够在 Windows 的旧版本中使用 clHighlight 或 clWindow 的颜色值作为背景色来完成此操作。但是对于 Aero 主题,它总是在图像的非透明部分后面绘制一个框,而不是 Aero 使用的渐变蓝色突出显示颜色。我怎样才能做到这一点?
我相信我应该使用 alpha 通道,但我不确定如何从 TImageList 到 canvas。我相信在我开始在单元格中的 canvas 上绘制之前,单元格已完全用实际高亮颜色绘制。我只想画出图像的非透明部分并留下背景。
我终于能够确定如何在 dbgrid 上以透明方式显示图像,即使使用了 Aero 等主题。
我使用了常规的 TImageList 并加载了我需要在 dbgrid 上显示的图像。在我的例子中有两个,它们是图标 (ico) 格式。我没有像大多数旧代码建议的那样将图像传输到位图,然后将其绘制到 dbgrid canvas,而是在 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 canvas,这将提供所需的透明度。
更新:我用加载到 Timagelist 中的 bmp 进行了尝试,它也有效。
我正在尝试将图像添加到考虑了透明度的 TDbgrid 的列中。当在 DBGridDrawColumnCell 过程中从 canvas 上的 TImageList 绘制图像时,我需要图像的背景(与左下角像素相同的颜色)呈现透明。我希望这个透明区域显示高亮颜色或非高亮颜色,尤其是在使用主题时,例如Aero。我已经能够在 Windows 的旧版本中使用 clHighlight 或 clWindow 的颜色值作为背景色来完成此操作。但是对于 Aero 主题,它总是在图像的非透明部分后面绘制一个框,而不是 Aero 使用的渐变蓝色突出显示颜色。我怎样才能做到这一点?
我相信我应该使用 alpha 通道,但我不确定如何从 TImageList 到 canvas。我相信在我开始在单元格中的 canvas 上绘制之前,单元格已完全用实际高亮颜色绘制。我只想画出图像的非透明部分并留下背景。
我终于能够确定如何在 dbgrid 上以透明方式显示图像,即使使用了 Aero 等主题。
我使用了常规的 TImageList 并加载了我需要在 dbgrid 上显示的图像。在我的例子中有两个,它们是图标 (ico) 格式。我没有像大多数旧代码建议的那样将图像传输到位图,然后将其绘制到 dbgrid canvas,而是在 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 canvas,这将提供所需的透明度。
更新:我用加载到 Timagelist 中的 bmp 进行了尝试,它也有效。