如何在 Rad Studio 中使用 C++ 在 TDBGrid 的标题单元格下画一条线?

How to draw a line under the title cells on TDBGrid using C++ in Rad Studio?

我想在 TDBGrid 标题单元格下画一条线,但似乎无法正常工作。我在 OnDrawColumnCell 事件中这样做是这样的:

   Canvas->Pen->Color = TColor(RGB(0, 0, 0));
   Canvas->MoveTo(Rect.Left, Rect.Bottom);
   Canvas->LineTo(Rect.Right, Rect.Bottom);

它的签名是这样的:

void __fastcall TfrmModelDetails::dbGridModelMapDrawColumnCell(TObject *Sender, const TRect &Rect,
          int DataCol, TColumn *Column, TGridDrawState State)

我确定在检查调试信息后正在调用该方法,但没有绘制任何东西。为什么会这样?

OnDrawColumnCell 不会为标题单元格调用。据我在 TCustomDBGrid 源代码中看到的,标题绘制是由一个内部过程完成的,你不能从外部更改它。可能您必须派生一个新组件并覆盖执行所有处理的 DrawCell

你没有展示dbGridModelMapDrawColumnCell的完整代码...一定要在它前面调用DefaultDrawColumnCell然后自己画图。

此外,最后一行像素是Rect.Bottom - 1。你正在画出视野。

最后,Canvas 单独指的是表格,而不是网格。您必须使用您使用的 DBGrid 实例进行限定,或者将 Sender 参数转换为 TDBGrid 以引用它的 Canvas 属性.