Bonjour,
Dans l'évenement OnClick de la StringGrid :
Edit1.Text := StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
Ou plus léger
1 2
| With StringGrid1 do
Edit1.Text := Cells[Col,Row]; |
Cela fonctionne que l'on puisse donner le focus à la cellule (Ex. GoRowSelect:=false;...) ou non (GoRowSelect:=true;...). MAIS, limite de ce code simple : si FixedCol=1 ou FixedRow=1 alors on ne peut pas lire les Cells(0,x) ou les Cells(y,0)...
Dans ce cas, autre méthode : la récupération de la position du curseur (probablement qu'un simple intérêt didactique dans le cadre de votre question)
1 2 3 4 5 6 7 8 9 10
| //Requiert uses LCLIntf pour GetCursorPos()
var P: TPoint;
aCol, aRow: integer;
begin
GetCursorPos(P) ;
P := StringGrid1.ScreenToClient(P);
StringGrid1.MouseToCell(P.X,P.Y,aCol,aRow);
//Eventuellement traitement spécial si aCol=0 ou/et aRow=0
Edit1.Text := StringGrid1.Cells[aCol,aRow];
end; |
Attention dans cette autre méthode : A partir du moment où il y a des ascenceurs actifs dans la StringGrid, il peut y avoir un bug lors du "replacement" des cellules partiellement visibles. Si le code est placé directement tel quel dans l'évènement OnClick de la StringGrid, alors dans ce cas, la valeur récupérée est parfois décalée de Row ou/et Col = +-1... car elle est récupérée après le rafraîchissement automatique de la StringGrid qui tend à repositionner automatiquement la cellule partiellement affichée de manière à ce qu'elle soit visible totalement (si c'est possible évidemment). Et donc la position initiale du clic ne correspond plus au moment de son traitement à la cellule de départ. Le problème est contournable. Pas de prob. identique dans le premier code.
Cordialement. Gilles
Partager