我有一个TDBGrid的后代,允许选择多行。
我想在他们点击排水沟时打开这个模式,当他们点击网格中的任何单元格时关闭。
在OnMouseDown事件处理程序中是否有一种方法可以检测到它们在哪里点击?
答案 0 :(得分:2)
OnMouseDown
很难;您可以通过X
和Y
参数获取事件的坐标,并通过将TDBGrid
类型转换为它的祖先TCustomGrid
来转换为行和列:
var
Coord: TGridCoord;
begin
Coord := TCustomGrid(DBGrid1).MouseCoord(X, Y);
if Coord.X = 0 then
// We're in the "gutter"
end;
但是,OnMouseDown
似乎仅在单击标题行时触发TDBGrid
。
OnCellClick
似乎是一种可能的选择,但它只会触发实际的单元格(不包括装订线和标题行),所以它不起作用。 OnColEnter
也不会,因为当你想要它时它不会触发。
看起来您最好的选择是使用标准的 Ctrl 和 Shift 修饰符和鼠标左键来进行多项选择,就像Windows中的其他应用程序一样多选。