首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将具有透明度的图像添加到delphi中的TDbgrid列中?

如何将具有透明度的图像添加到delphi中的TDbgrid列中?
EN

Stack Overflow用户
提问于 2015-05-15 00:18:01
回答 1查看 2.5K关注 0票数 3

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

我相信我应该使用alpha通道,但我不知道如何从一个TImageList到一个画布。我相信,在我开始在单元格的画布上绘制之前,该单元格是完全用实际的高亮颜色绘制的。我只想画出图像的非透明部分,然后离开背景。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 19:13:48

即使使用了Aero之类的主题,我最终还是能够确定如何以透明的方式在dbgrid上显示图像。

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

代码语言:javascript
运行
复制
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和它也工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30249557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档