Как можно имитировать щелчок мышью по какой-либо ячейке в TDBGrid?
Имитировать щелчок мышью по ячейке в TDBGrid
Ответы (1)
Обновление:
Этот код должен делать то, что вы хотите:
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;
Функция MouseCoord
TDBGrid преобразует пару координат (X, Y) в номер столбца (TGridCoord.X) и номер строки ((TGridCoord.Y).
Событие OnMouseUp
отображает результаты вызова DBGrid1.MouseCoord для входных аргументов X и Y.
SimulateClick
имитирует щелчок по ячейке сетки. Он использует GetCellRect для получения координат (в DBGrid) верхнего левого угла указанной ячейки, а затем вызывает Perform(WM_LButtonUp,...) в DBGrid, передавая координаты в аргументе LParam.
Наконец, Button1Click
вызывает SimulateClick, используя значения Col и Row из пары TEdit. Это приводит к срабатыванию события OnMouseUp и отображению номера столбца и строки, так что вы можете убедиться, что это имеет тот же эффект, что и щелчок мышью по соответствующей ячейке.
DBGrid1.Perform(WM_LButtonDown, 0, Integer(Coords));
перед «UP», я получаю то, что мне нужно .. ячейка с Coords выбирается и становится «сфокусированной» .. thx!
- person userPro; 25.08.2016