在TDBGrid中模拟鼠标单击一个单元格

时间:2016-08-25 11:34:28

标签: delphi dbgrid tdbgrid

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

1 个答案:

答案 0 :(得分:3)

<强>更新

此代码应该按您的要求执行:

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&amp; X上调用DBGrid1.MouseCoord的结果。 Y输入参数。

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

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