delphi TcxGrid网格组件:OnCustomDrawCell 自绘网格事件的应用
onCustomDrawCell事件分为两种:
一个是整个表格的事件,需要判断单元格所在的字段,符合了之后,才能进行下一步
取得单元格所在字段的字段名:TcxGridColumn(AViewInfo.Item).DataBinding.FilterFieldName
AViewInfo.Item 表示当前单元格所在的列
AViewInfo.value 表示当前单元格的值
补充:
//以下两句代码在下图中是等价的,建议使用第二行 ACanvas.FillRect(AViewInfo.Bounds, oColor); ACanvas.Brush.Color := clTeal;
一个是指定列的事件.不需要判断所在字段
一.当某一列的数值符合某个条件时,填充颜色.(你还可以设置它字体的各种属性等)
效果图:
二.ACanvas字体样式设置
请参考下图格式书写代码.注意style的层级关系.比如
设置字体大小: ACanvas.Font.Size:=12;
设置字体为粗体: ACanvas.Font.Style.fsBold:=True;
都是成年人,其他字体设置,请自己举一反三
三.当某个值符合特定条件时,改变整行记录的背景色
首先.我们要明白,这不是单独某一个列的行为,所以我们不能使用指定列的事件,而应该使用全局事件
procedure TForm1.cxGrid1DBTableView1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); begin //AViewInfo.GridRecord.Values 返回的是一整行记录的数组 //你也可以使用arr[0]这样的方式返回,但是如果用户移动列位置的时候,程序就会出错 //所以还是用index来定位比较稳
//字段名.Index 返回字段所在的位置,比如下面的ID.Index,反回的是ID字段排在第几列 if AViewInfo.GridRecord.Values[ID.Index] = 5 then ACanvas.Brush.Color := clTeal; end;
效果如下:
分类:
Delphi学习笔记
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训