简体   繁体   中英

Simulate mouse click on a cell in TDBGrid

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

Update:

This code should do what you seem to want:

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;

The MouseCoord function of TDBGrid converts a pair of coordinates (X, Y) into a Column number (TGridCoord.X) and a Row number ((TGridCoord.Y).

The OnMouseUp event displays the results of calling DBGrid1.MouseCoord on the X & Y input arguments.

The SimulateClick simulates a click on a cell of the grid. It uses GetCellRect to get the coordinates (in the DBGrid) of the topleft of a specified cell and then calls Perform(WM_LButtonUp,...) on the DBGrid, passing the coordinates in the LParam argument.

Finally Button1Click calls SimulateClick using Col and Row values from a pair of TEdits. That causes the OnMouseUp event to fire and display the Col and Row number, so you can satisfy yourself that it has the same effect as mouse-clicking the corresponding cell.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM