如何在 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
属性.
我想在 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
属性.