【发布时间】:2012-08-19 21:36:06
【问题描述】:
我想确定在 TDBGrid 事件 TitleClick(Column: TColumn) 上单击的标题单元格的屏幕坐标。
我可以使用 ColWidths 属性(通过 TDBGrid = class(DBGrids.TDBGrid) 类型声明公开),但我很难确定用户是否重新排序了列,并结合了 TDBGrid 的水平滚动.我还想在后续移动和调整大小期间跟踪此列的位置,同时注意此列可能会从网格中滚动出来。
我在这个问题上花了很长时间,而且我很擅长 Delphi,所以这不是一个无聊的问题。
【问题讨论】:
-
如果列偏离网格,您为什么要担心?显然,如果用户可以单击标题,则该列是可见的,对吧?
-
我正在使用标题单击来更改索引,并且我在该列旁边显示了一个小位图以指示当前的排序顺序。如果网格按当前不可见的字段上的顺序排序,那么我不想看到图像。
-
有免费的组件可以做到这一点,比如来自(scalabium.com)的smdbgrid组件,来自(jvcl.delphi-jedi.org)的JvDbgrid。
-
我正在实现一个复杂的 TDBGrid,它会让 TEdit 浮动在用户可以输入过滤器的每个列标题下方。稍后将扩展到自定义的 TComboBox,其中可以针对每列输入多个过滤器和范围,因此我正在构建自己的组件,但它全部在运行中,因为它进入了 TFrame,这在技术上使 TFrame 本身成为我的完整零件。通过这种级别的自定义,可以更轻松地完成更简单的基础,此外我不会使用自定义组件来解决您在 1 行代码中为我解决的问题(我正在查看标题时,行 = 0!)
-
啊,我明白了。我上面提到的自定义组件,当然不仅有排序功能,还有更多。我提到它们的目的是您可能想探索它们的功能,并且只实现尚未实现的其他功能,因此您不必从头开始。
标签: delphi coordinates tdbgrid