Bonjour,
je travaille avec Lazarus V.0.9.22 Beta.
Je souhaite recopier le contenu d'une cellule d'un StringGrid (real) dans un edit à l'aide d'un clic de souris.
Merci pour votre aide
je suis débutant
Version imprimable
Bonjour,
je travaille avec Lazarus V.0.9.22 Beta.
Je souhaite recopier le contenu d'une cellule d'un StringGrid (real) dans un edit à l'aide d'un clic de souris.
Merci pour votre aide
je suis débutant
Bonjour
Sous Linux,
A moins que ce ne soit pas vraiment cela la question ?Code:
1
2 Edit1.Text := StringGrid1.Cells[0,0];
Bonjour,
Dans l'évenement OnClick de la StringGrid :
Ou plus légerCode:Edit1.Text := StringGrid1.Cells[StringGrid1.Col,StringGrid1.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)...Code:
1
2 With StringGrid1 do Edit1.Text := Cells[Col,Row];
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)
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.Code:
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;
Cordialement. Gilles