You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi项目的TLMDGrid中设置最后一行(汇总行)颜色

给TLMDGrid的最后一行(汇总行)设置自定义颜色

我之前维护Delphi项目时也用过LMD的TLMDGrid做汇总行样式定制,刚好能给你分享几个靠谱的实现方法——毕竟官方文档确实有点简略,得靠实际摸索:

方法1:使用OnGetCellParams事件(推荐,无需手动绘制)

这个事件是TLMDGrid专门用来定制单元格参数的,不用自己写绘制逻辑,只需要设置参数就行,非常省心:

  1. 在窗体设计器里选中你的TLMDGrid组件,找到事件面板里的OnGetCellParams,双击创建事件处理函数。
  2. 写入以下代码(根据你的需求调整颜色值):
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:40