gpt4 book ai didi

delphi - 如何获取 DBGrid 单元格的屏幕坐标

转载 作者:行者123 更新时间:2023-12-03 15:08:39 26 4
gpt4 key购买 nike

我想在当前行特定单元格的右下角显示弹出按钮或精美消息(带有彩色背景等)。

现在我只知道如何获取网格坐标:
x = DBGrid.DataSource.DataSet.RecNo
y = DBGrid.Columns[索引]

还有 TCustomGrid.CellRect,它可以执行我想要的操作,但它是 protected ,我不想继承和创建另一个组件类。

我能想到的一个疯狂的解决方法是将 onDrawColumnCell 事件中的 TRect-s 保存到某个数组。

那么,你觉得呢?

编辑
如何获取当前行中第二个单元格的屏幕坐标?

最佳答案

你可以使用一点欺骗来获取当前的单元格坐标。 :)

允许组件的后代访问祖先类的 protected 字段。由于除了访问 TDBGrid 的 protected CellRect 方法之外,我们不需要做任何事情,因此我们将创建一个插入器(什么都不做的后代),它只允许我们访问该 protected 方法。然后,我们可以将 TDBGrid 类型转换为新的后代类,并使用它来访问 protected 方法。我使用 THack 作为前缀来命名后代,以明确后代的唯一目的是访问(“hack”)祖先类。

// implementation
type
THackDBGrid=class(TDBGrid);

// Where you need the coordinates
var
CurrRow: Integer;
Rect: TRect;
begin
CurrRow := THackDBGrid(DBGrid1).Row;
Rect := THackDBGrid(DBGrid1).CellRect(ColIndexYouWant, CurrRow);
// Rect now contains the screen coordinates you need, or an empty
// rectangle if there is no cell at the col and row specified.
end;

正如OP在评论中指出的那样,在delphi.about.com中有关于它如何工作的更详细的描述。 .

关于delphi - 如何获取 DBGrid 单元格的屏幕坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com