c++ - 如何在 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)
我确信在检查调试信息后调用了该方法,但没有绘制任何内容。为什么会这样?
解决方案
OnDrawColumnCell
不要求标题单元格。据我在TCustomDBGrid
源代码中看到的,标题绘制是由一个你不能从外部改变的内部过程完成的。可能您必须派生一个新组件并覆盖DrawCell
它来完成所有处理。
你没有显示你的完整代码dbGridModelMapDrawColumnCell
......一定要DefaultDrawColumnCell
在它前面调用,然后做你自己的绘图。
此外,最后一个像素线是Rect.Bottom - 1
. 你正在画出视野。
最后,Canvas
单独指的是形式,而不是网格。DBGrid
您必须使用您使用的实例进行限定,或者将Sender
参数转换TDBGrid
为引用它的Canvas
属性。
推荐阅读
- python - Pycharm Selenium Geckodriver 路径问题
- angular - 子元素初始化后,父组件对子 DOM 的操作导致 ExpressionChangedAfterItHasBeenCheckedError
- excel - 在 VBA 中禁用屏幕更新也会删除 DisplayBar 中的背景
- json - 从自定义 AMI 创建 ec2 实例时提供不同的卷标签
- botframework - 我如何在 C# 中为 Microsoft Bot 框架 V4 编写一个简单的单元测试用例,因为它现在使用 .netcore
- javascript - 当用户单击“在新选项卡中打开”时,如何重定向 iframe 内的链接?
- coq - 类型:输入 Coq
- google-compute-engine - 谷歌云 TCP LB 让 RTMP 和 HTTP(S) 工作
- node.js - node.js 命令行应用程序未运行
- c++ - 执行前解析 STARTUPINFO hStdInput