首页 > 解决方案 > 如何在 Rad Studio 中使用 C++ 在 TDBGrid 的标题单元格下画一条线?

问题描述

我试图在 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)

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

标签: c++user-interfacedelphi

解决方案


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

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

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

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


推荐阅读