模拟鼠标点击TDBGrid中的单元格

Simulate mouse click on a cell in TDBGrid

如何模拟鼠标点击 TDBGrid 中的某个单元格?

更新:

此代码应该可以满足您的要求:

type
  TMyDBGrid = class(TDBGrid);

function TForm1.GetCellRect(ACol, ARow : Integer) : TRect;
begin
  Result := TmyDBGrid(DBGrid1).CellRect(ACol, ARow);
end;

procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift:
    TShiftState; X, Y: Integer);
var
  Coords : TGridCoord;    
begin
  Coords := DBGrid1.MouseCoord(X, Y);
  Caption := Format('Col: %d, Row: %d', [Coords.X, Coords.Y]);
end;

procedure TForm1.SimulateClick(ACol, ARow : Integer);
type
  TCoords = packed record
    XPos : SmallInt;
    YPos : SmallInt;
  end;
var
  ARect : TRect;
  Coords : TCoords;
begin
  ARect := GetCellRect(ACol, ARow);
  Coords.XPos := ARect.Left;
  Coords.YPos := ARect.Top;
  DBGrid1.Perform(WM_LButtonUp, 0, Integer(Coords));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SimulateClick(StrToInt(edX.Text), StrToInt(edY.Text));
end;

TDBGrid的MouseCoord函数将一对坐标(X,Y)转换为一个列号(TGridCoord.X)和一个行号((TGridCoord.Y)。

OnMouseUp 事件显示对 X 和 Y 输入参数调用 DBGrid1.MouseCoord 的结果。

SimulateClick 模拟单击​​网格的单元格。它使用 GetCellRect 获取指定单元格左上角的坐标(在 DBGrid 中),然后在 DBGrid 上调用 Perform(WM_LButtonUp,...),将坐标传递到 LParam 参数中。

最后 Button1Click 使用来自一对 TEdit 的 Col 和 Row 值调用 SimulateClick。这会导致 OnMouseUp 事件触发并显示 Col 和 Row 编号,因此您可以放心,它与鼠标单击相应单元格的效果相同。