如何在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
相关产品推荐
相关产品推荐

