如何在Delphi项目的TLMDGrid中设置最后一行(汇总行)颜色
给TLMDGrid的最后一行(汇总行)设置自定义颜色
我之前维护Delphi项目时也用过LMD的TLMDGrid做汇总行样式定制,刚好能给你分享几个靠谱的实现方法——毕竟官方文档确实有点简略,得靠实际摸索:
方法1:使用OnGetCellParams事件(推荐,无需手动绘制)
这个事件是TLMDGrid专门用来定制单元格参数的,不用自己写绘制逻辑,只需要设置参数就行,非常省心:
- 在窗体设计器里选中你的TLMDGrid组件,找到事件面板里的
OnGetCellParams,双击创建事件处理函数。 - 写入以下代码(根据你的需求调整颜色值):
procedure TYourForm.LMDGridGetCellParams(Sender: TObject; ACol, ARow: Integer; var Params: TLMDGridCellParams); var Grid: TLMDGrid; begin Grid := Sender as TLMDGrid; // 判断当前行是否是最后一行(汇总行) if ARow = Grid.RowCount - 1 then begin // 设置背景色,这里用clSkyBlue示例,你可以换成任意颜色,比如RGB(240,248,255) Params.Brush.Color := clSkyBlue; // 可选:设置文字颜色,比如深色文字更醒目 Params.Font.Color := clNavy; end; end;
注意:如果你的网格有顶部固定行(FixedRows > 0),且汇总行是在数据行的最后(不是固定行),那判断条件要改成:
if ARow = Grid.RowCount - 1 - Grid.FixedRows then
方法2:使用OnDrawCell事件(手动绘制,更灵活)
如果需要更复杂的样式(比如带边框、渐变背景),可以用这个事件手动绘制单元格:
procedure TYourForm.LMDGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Grid: TLMDGrid; begin Grid := Sender as TLMDGrid; if ARow = Grid.RowCount - 1 then begin // 先设置背景色并填充矩形 Grid.Canvas.Brush.Color := clSkyBlue; Grid.Canvas.FillRect(Rect); // 绘制单元格文本(要对齐的话可以用DrawText) Grid.Canvas.Font.Color := clNavy; Grid.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Grid.Cells[ACol, ARow]); end else begin // 非汇总行按默认绘制 Grid.DefaultDrawCell(ACol, ARow, Rect, State); end; end;
额外提示
- 如果你的汇总行是动态添加的(比如数据加载后才插入),记得在添加完成后调用
Grid.Invalidate触发重绘,确保样式生效。 - 设计器里设置的列颜色会被事件中的设置覆盖,所以不用担心冲突——事件的优先级更高。
内容的提问来源于stack exchange,提问作者Stefano Losi
相关产品推荐
相关产品推荐

