如何模拟鼠标点击TDBGrid中的某个单元格?
答案 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编号,因此您可以确保它与鼠标单击相应的单元格具有相同的效果。