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

如何在C++Builder的TDBGrid列中仅显示图标而不显示数值

解决TDBGrid列仅显示图标不显示数值的问题

你遇到的问题是因为当前代码只在单元格上叠加绘制了图标,但TDBGrid的默认文本绘制逻辑仍然会执行,所以数值会和图标一起显示。要只显示图标,需要在处理目标列时,完全接管单元格的绘制流程,跳过默认的文本输出。

修改后的代码如下:

void __fastcall TMainForm::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect,
    int DataCol, TColumn *Column, TGridDrawState State)
{
    TDBGrid* grid = reinterpret_cast<TDBGrid*>(Sender);
    if (DataCol == 1) {
        // 还原单元格背景样式,保持和默认效果一致
        if (State.Contains(gdSelected)) {
            grid->Canvas->Brush->Color = clHighlight;
        } else {
            grid->Canvas->Brush->Color = Column->Color;
        }
        // 填充单元格,覆盖原有文本
        grid->Canvas->FillRect(Rect);

        // 绘制图标
        int iconindex = Column->Field->AsInteger;
        ImageListSmall->Draw(grid->Canvas, Rect.Left + 2, Rect.Top + 2, iconindex, True);
    } else {
        // 其他列保持默认绘制逻辑
        grid->DefaultDrawColumnCell(Rect, DataCol, Column, State);
    }
}

关键说明:

  • 先通过FillRect填充单元格,清除原有文本内容;同时根据单元格的选中状态设置对应背景色,保证视觉效果和默认一致。
  • 目标列不再执行默认绘制,仅绘制图标;其他列调用DefaultDrawColumnCell维持原有显示逻辑。

内容的提问来源于stack exchange,提问作者user3161924

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:33:19