- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将图像添加到考虑透明度的 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/
我是一名优秀的程序员,十分优秀!