gpt4 book ai didi

image - 如何在delphi中向TDbgrid列添加透明图像?

转载 作者:行者123 更新时间:2023-12-03 15:57:59 24 4
gpt4 key购买 nike

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

我相信我应该使用 Alpha channel ,但我不知道如何从 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,它也有效。

关于image - 如何在delphi中向TDbgrid列添加透明图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com