Comment simuler un clic de souris sur une cellule dans TDBGrid?Simuler le clic de souris sur une cellule dans TDBGrid
Répondre
Mise à jour:
Ce code devrait faire ce que vous semblez vouloir:
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;
La fonction MouseCoord
de TDBGrid convertit une paire de coordonnées (X, Y) dans un numéro de colonne (TGridCoord L'événement OnMouseUp
affiche les résultats de l'appel de DBGrid1.MouseCoord sur le X & ents. Le SimulateClick
SimulateClick
simule un clic sur une cellule de la grille. Il utilise GetCellRect pour obtenir les coordonnées (dans le DBGrid) du topleft d'une cellule spécifiée, puis appelle Perform (WM_LButtonUp, ...) sur le DBGrid, en passant les coordonnées dans l'argument LParam.
Enfin, Button1Click
appelle SimulateClick en utilisant les valeurs Col et Row d'une paire de TEdits. Cela provoque l'exécution de l'événement OnMouseUp et affiche le nombre Col et Row, de sorte que vous pouvez vous assurer qu'il a le même effet que le clic de la souris sur la cellule correspondante.
Merci beaucoup! – userPro
quand j'utilise 'DBGrid1.Perform (WM_LButtonDown, 0, Integer (Coords));' avant le 'UP', j'obtiens ce dont j'ai besoin .. la cellule avec _Coords_ est sélectionnée et comme 'focalisée' .. thx! – userPro
@userPro: Content que vous l'ayez résolu. En fait, je voudrais revenir à votre q sur la suppression des enregistrements et voir si nous pouvons résoudre ce problème - je vais vous poster quelque chose dans ma réponse là avec quelques suggestions/requêtes au sujet de votre q. – MartynA
@RBA: Cela ne semble pas répondre au point spécifique du PO, cependant? – MartynA
Pourquoi avez-vous besoin de simuler un clic dans une cellule? Si vous connaissez la ligne et la colonne sur lesquelles vous devez opérer, écrivez simplement le code pour le faire. Ensuite, si vous voulez que la même chose se produise lorsqu'une cellule est cliquée, appelez simplement ce code dans le gestionnaire OnCellClick. Ou êtes-vous incertain comment faire cela? – MartynA
@MartynA parfois, il ya un problème quand j'essaie de supprimer un enregistrement .. Mais quand je sélectionne une cellule dans ma ligne actuelle, la suppression est effectuée! .. – userPro