Sûrement un truc tout bête, mais si quelqu'un peut m'éclairer...
Je cherche à connaitre les coordonnées (colonne, ligne) de la cellule sur laquelle se trouve le curseur de la souris.
Merci et bonne année.
Sûrement un truc tout bête, mais si quelqu'un peut m'éclairer...
Je cherche à connaitre les coordonnées (colonne, ligne) de la cellule sur laquelle se trouve le curseur de la souris.
Merci et bonne année.
j'aimerai savoir ...
Hello,
sur un clic ou sur survol ?
sur un clic exemple :
Ami calmant, J.P
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TMainForm.StringGridClick(Sender: TObject); begin Statusbar.SimpleText := Format('Column %d, row %d, text: "%s"', [StringGrid.Col, StringGrid.Row, StringGrid.Cells[StringGrid.Col, StringGrid.Row]]); end;
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Bonjour,
Le grid propose également une méthode MouseToCell qui fonctionne bien avec les onMouseOver, onMouseDown etc. Il faut que les coordonnées X, Y de la souris aient été transposées dans la zone client du grid comme c'est le cas avec ces méthodes.
Salutations.
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)
Bonsoir,
Merci de votre réponse rapide.
La solution que vous me proposez est efficace, mais le menu popup que contient la StringGrid semble bloquer MouseToCell() ou StringGrid.Cells().
Je ne sais pas comment contourner le problème pour avoir les coordonnées de la cellule située sous la souris quand je déclenche le sous-menu.
Et je ne sais pas non plus me servir du paramètre Sender qui pourrait sembler utile.
Désolé
j'aimerai savoir ...
hello,
si il y a un menu popup affecté à la stringgrid, il faut ne plus l'affecter à la stringgrid et le déclencher sur l'événement MouseDown par exemple.
voici un exemple :
sur l'événement mousedown on affiche la ligne et la colonne de la StringGrid dans une barre de status et si c'est un click droit on affiche le menu popup :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TMainForm.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var P: TPoint; Ligne,Colonne : Integer; begin StringGrid1.MouseToCell(X,Y, Colonne, Ligne); Statusbar.SimpleText := Format('Colonne %d, Ligne %d', [Colonne,Ligne]); if Button = mbRight then begin P.X := X; P.Y := Y; P := StringGrid1.ClientToScreen(P); PopupMenu1.PopUp(P.X, P.Y); end; end;
Ami calmant, J.P
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Chapeau, vous ne dormez jamais, les gars.
En tout cas merci beaucoup pour la réponse.
Je pense que je vais arriver à m'en sortir avec cette nouvelle piste.
Merci Jurassic.
j'aimerai savoir ...
Bonjour,
Il y a aussi ClientToParent(aPnt, Form1) qui permet repasser dans l'espace client du parent qui pourrait être le stringgrid avant d'appeler MouseToCell.
Mes excuses à JP CASSOU : je n'avais pas vu sa proposition de MouseToCell.
Salutations
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)
Bonne Année et merci à tous pour vos solutions qui m'ont bien aidé.
Problème résolu.
j'aimerai savoir ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager