OVH Cloud OVH Cloud

PB click droit souris

5 réponses
Avatar
JCM
Bonjour =E0 tous

Quand je fais un click droit souris sur une cellulle d'un=20
MSFlexgrid, je veux changer la couleur de celle-ci.

Avec le code ci-dessous les coordonn=E9es de la cellulle ne=20
sont celles ou j'ai click=E9, Pouvez-vous me dire ou est le=20
probl=E8me

Private Sub FGPlanning_MouseDown(Button As Integer, Shift=20
As Integer, x As Single, Y As Single)

If Button And vbRightButton Then ' c'est le clic droit
FGPlanning.Row =3D FGPlanning.RowSel
FGPlanning.col =3D FGPlanning.ColSel
FGPlanning.CellBackColor =3D &HFFFFFF
FGPlanning.Text =3D ""
End If
End Sub

Merci de vos r=E9ponses
Cordialement
JCM

5 réponses

Avatar
christophe-pasde
Bonjour,

Pas bien l'habitude avec les MSqqchose, mais logiquement le X et Y que
tu récupère sont :

"Nombre qui spécifie la position en cours du pointeur de la souris. Les
valeurs x et y sont toujours exprimées en fonction du système de
coordonnées défini par les propriétés ScaleHeight, ScaleWidth, ScaleLeft
et ScaleTop de l'objet."

a toi de voir s'il existe une correspondance entre ça et les cellules

Christophe


JCM a écrit :

Bonjour à tous

Quand je fais un click droit souris sur une cellulle d'un
MSFlexgrid, je veux changer la couleur de celle-ci.

Avec le code ci-dessous les coordonnées de la cellulle ne
sont celles ou j'ai clické, Pouvez-vous me dire ou est le
problème

Private Sub FGPlanning_MouseDown(Button As Integer, Shift
As Integer, x As Single, Y As Single)

If Button And vbRightButton Then ' c'est le clic droit
FGPlanning.Row = FGPlanning.RowSel
FGPlanning.col = FGPlanning.ColSel
FGPlanning.CellBackColor = &HFFFFFF
FGPlanning.Text = ""
End If
End Sub

Merci de vos réponses
Cordialement
JCM



Avatar
Fred
Bonsoir,

Le problème est lié au fait que le click droit de la souris ne force pas le
positionnement dans la cellule. Du coup, les propriétés Col et Row ne
contiennent pas la position courante de la cellule. Pour ce faire, je vous
propose de déterminer la cellule courante à partir des coordonnées fournies,
x et y, tout comme le dit Christophe Pasde.

Pour commencer, on va balayer toutes les cellules, de la gauche vers la
droite et du haut vers le bas, en ajoutant la largeur de chaque cellule
parcourrue jusqu'à ce que les positions x et y soient atteintes.

Une fois la cellule déterminée, on va se positionner dessus en forçant les
propriétés col et row.

Après, il ne reste qu'à remplir la cellule...

Voici un exemple d'intégration :

Private Sub Form_Load()
With MSFlexGrid1
.Cols = 10
.Rows = 10
.FixedRows = 0
.FixedCols = 0
.SelectionMode = flexSelectionFree
End With

End Sub



Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As
Single, y As Single)
Dim X1 As Integer
Dim Y1 As Integer
Dim X2 As Integer
Dim Y2 As Integer
Dim XCol As Integer
Dim YCol As Integer

If Button = vbRightButton Then

With MSFlexGrid1
X1 = .LeftCol
Y1 = .TopRow
X2 = 0
Y2 = 0
'
' --- On détermine la position horizontale à partir de la
position X fournie
'
Do
If X2 + .ColWidth(X1) > x Then
XCol = X1
Exit Do
End If
X2 = X2 + .ColWidth(X1)
X1 = X1 + 1
Loop
'
' --- On détermine la position verticale à partir de la position
Y fournie
'
Do
If Y2 + .RowHeight(Y1) > y Then
YRow = Y1
Exit Do
End If
Y2 = Y2 + .RowHeight(Y1)
Y1 = Y1 + 1
Loop
'
' --- Ensuite, on se positionne sur la cellule et on la
colorie...
'
.Col = XCol
.Row = YRow
.CellBackColor = RGB(255, 0, 0)

End With
End If
End Sub

Attention : ce code ne supporte pas les entêtes fixes. (fixedRows et
firedCols). Si vous devez les exploiter, il faut penser à mettre à jour ce
code.

Bons tests,

Frédéric Puteaux.

"JCM" a écrit dans le message de news:
3d8901c49fe8$99962700$
Bonjour à tous

Quand je fais un click droit souris sur une cellulle d'un
MSFlexgrid, je veux changer la couleur de celle-ci.

Avec le code ci-dessous les coordonnées de la cellulle ne
sont celles ou j'ai clické, Pouvez-vous me dire ou est le
problème

Private Sub FGPlanning_MouseDown(Button As Integer, Shift
As Integer, x As Single, Y As Single)

If Button And vbRightButton Then ' c'est le clic droit
FGPlanning.Row = FGPlanning.RowSel
FGPlanning.col = FGPlanning.ColSel
FGPlanning.CellBackColor = &HFFFFFF
FGPlanning.Text = ""
End If
End Sub

Merci de vos réponses
Cordialement
JCM
Avatar
JCM
Bonjour

et merci pour vos réponses qui m'ont été d'un grand
secours car cela fonctionne.

Néanmoins je voudrais que la cellule sélectionnée soit
entouré d'un encadrement pointillé (comme une sélection)
et cela je n'y arrive pas, je ne trouve pas le bon code

Merci pour votre réponse
Cordialement
JCM
-----Message d'origine-----
Bonsoir,

Le problème est lié au fait que le click droit de la


souris ne force pas le
positionnement dans la cellule. Du coup, les propriétés


Col et Row ne
contiennent pas la position courante de la cellule. Pour


ce faire, je vous
propose de déterminer la cellule courante à partir des


coordonnées fournies,
x et y, tout comme le dit Christophe Pasde.

Pour commencer, on va balayer toutes les cellules, de la


gauche vers la
droite et du haut vers le bas, en ajoutant la largeur de


chaque cellule
parcourrue jusqu'à ce que les positions x et y soient


atteintes.

Une fois la cellule déterminée, on va se positionner


dessus en forçant les
propriétés col et row.

Après, il ne reste qu'à remplir la cellule...

Voici un exemple d'intégration :

Private Sub Form_Load()
With MSFlexGrid1
.Cols = 10
.Rows = 10
.FixedRows = 0
.FixedCols = 0
.SelectionMode = flexSelectionFree
End With

End Sub



Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift


As Integer, x As
Single, y As Single)
Dim X1 As Integer
Dim Y1 As Integer
Dim X2 As Integer
Dim Y2 As Integer
Dim XCol As Integer
Dim YCol As Integer

If Button = vbRightButton Then

With MSFlexGrid1
X1 = .LeftCol
Y1 = .TopRow
X2 = 0
Y2 = 0
'
' --- On détermine la position horizontale à


partir de la
position X fournie
'
Do
If X2 + .ColWidth(X1) > x Then
XCol = X1
Exit Do
End If
X2 = X2 + .ColWidth(X1)
X1 = X1 + 1
Loop
'
' --- On détermine la position verticale à


partir de la position
Y fournie
'
Do
If Y2 + .RowHeight(Y1) > y Then
YRow = Y1
Exit Do
End If
Y2 = Y2 + .RowHeight(Y1)
Y1 = Y1 + 1
Loop
'
' --- Ensuite, on se positionne sur la


cellule et on la
colorie...
'
.Col = XCol
.Row = YRow
.CellBackColor = RGB(255, 0, 0)

End With
End If
End Sub

Attention : ce code ne supporte pas les entêtes fixes.


(fixedRows et
firedCols). Si vous devez les exploiter, il faut penser à


mettre à jour ce
code.

Bons tests,

Frédéric Puteaux.

"JCM" a écrit dans le


message de news:
3d8901c49fe8$99962700$
Bonjour à tous

Quand je fais un click droit souris sur une cellulle d'un
MSFlexgrid, je veux changer la couleur de celle-ci.

Avec le code ci-dessous les coordonnées de la cellulle ne
sont celles ou j'ai clické, Pouvez-vous me dire ou est le
problème

Private Sub FGPlanning_MouseDown(Button As Integer, Shift
As Integer, x As Single, Y As Single)

If Button And vbRightButton Then ' c'est le clic droit
FGPlanning.Row = FGPlanning.RowSel
FGPlanning.col = FGPlanning.ColSel
FGPlanning.CellBackColor = &HFFFFFF
FGPlanning.Text = ""
End If
End Sub

Merci de vos réponses
Cordialement
JCM


.



Avatar
Fred
Bonsoir,

Ajoutez simplement l'appel à la fonction SetFocus après le coloriage de la
cellule, soit :

...
.Col = XCol
.Row = YRow
.CellBackColor = RGB(255, 0, 0)
.SetFocus

La main sera donnée au contrôle msFlexGrid et la cellule sera alors
sélectionnée...

Frédéric Puteaux.

"JCM" a écrit dans le message de news:
088101c4a091$242cbbb0$
Bonjour

et merci pour vos réponses qui m'ont été d'un grand
secours car cela fonctionne.

Néanmoins je voudrais que la cellule sélectionnée soit
entouré d'un encadrement pointillé (comme une sélection)
et cela je n'y arrive pas, je ne trouve pas le bon code

Merci pour votre réponse
Cordialement
JCM
-----Message d'origine-----
Bonsoir,

Le problème est lié au fait que le click droit de la


souris ne force pas le
positionnement dans la cellule. Du coup, les propriétés


Col et Row ne
contiennent pas la position courante de la cellule. Pour


ce faire, je vous
propose de déterminer la cellule courante à partir des


coordonnées fournies,
x et y, tout comme le dit Christophe Pasde.

Pour commencer, on va balayer toutes les cellules, de la


gauche vers la
droite et du haut vers le bas, en ajoutant la largeur de


chaque cellule
parcourrue jusqu'à ce que les positions x et y soient


atteintes.

Une fois la cellule déterminée, on va se positionner


dessus en forçant les
propriétés col et row.

Après, il ne reste qu'à remplir la cellule...

Voici un exemple d'intégration :

Private Sub Form_Load()
With MSFlexGrid1
.Cols = 10
.Rows = 10
.FixedRows = 0
.FixedCols = 0
.SelectionMode = flexSelectionFree
End With

End Sub



Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift


As Integer, x As
Single, y As Single)
Dim X1 As Integer
Dim Y1 As Integer
Dim X2 As Integer
Dim Y2 As Integer
Dim XCol As Integer
Dim YCol As Integer

If Button = vbRightButton Then

With MSFlexGrid1
X1 = .LeftCol
Y1 = .TopRow
X2 = 0
Y2 = 0
'
' --- On détermine la position horizontale à


partir de la
position X fournie
'
Do
If X2 + .ColWidth(X1) > x Then
XCol = X1
Exit Do
End If
X2 = X2 + .ColWidth(X1)
X1 = X1 + 1
Loop
'
' --- On détermine la position verticale à


partir de la position
Y fournie
'
Do
If Y2 + .RowHeight(Y1) > y Then
YRow = Y1
Exit Do
End If
Y2 = Y2 + .RowHeight(Y1)
Y1 = Y1 + 1
Loop
'
' --- Ensuite, on se positionne sur la


cellule et on la
colorie...
'
.Col = XCol
.Row = YRow
.CellBackColor = RGB(255, 0, 0)

End With
End If
End Sub

Attention : ce code ne supporte pas les entêtes fixes.


(fixedRows et
firedCols). Si vous devez les exploiter, il faut penser à


mettre à jour ce
code.

Bons tests,

Frédéric Puteaux.

"JCM" a écrit dans le


message de news:
3d8901c49fe8$99962700$
Bonjour à tous

Quand je fais un click droit souris sur une cellulle d'un
MSFlexgrid, je veux changer la couleur de celle-ci.

Avec le code ci-dessous les coordonnées de la cellulle ne
sont celles ou j'ai clické, Pouvez-vous me dire ou est le
problème

Private Sub FGPlanning_MouseDown(Button As Integer, Shift
As Integer, x As Single, Y As Single)

If Button And vbRightButton Then ' c'est le clic droit
FGPlanning.Row = FGPlanning.RowSel
FGPlanning.col = FGPlanning.ColSel
FGPlanning.CellBackColor = &HFFFFFF
FGPlanning.Text = ""
End If
End Sub

Merci de vos réponses
Cordialement
JCM


.



Avatar
JCM
Bonjour

Merci pour votre aide, tout est OK
Cordialement
JCM
-----Message d'origine-----
Bonsoir,

Ajoutez simplement l'appel à la fonction SetFocus après


le coloriage de la
cellule, soit :

...
.Col = XCol
.Row = YRow
.CellBackColor = RGB(255, 0, 0)
.SetFocus

La main sera donnée au contrôle msFlexGrid et la cellule


sera alors
sélectionnée...

Frédéric Puteaux.

"JCM" a écrit dans le


message de news:
088101c4a091$242cbbb0$
Bonjour

et merci pour vos réponses qui m'ont été d'un grand
secours car cela fonctionne.

Néanmoins je voudrais que la cellule sélectionnée soit
entouré d'un encadrement pointillé (comme une sélection)
et cela je n'y arrive pas, je ne trouve pas le bon code

Merci pour votre réponse
Cordialement
JCM
-----Message d'origine-----
Bonsoir,

Le problème est lié au fait que le click droit de la


souris ne force pas le
positionnement dans la cellule. Du coup, les propriétés


Col et Row ne
contiennent pas la position courante de la cellule. Pour


ce faire, je vous
propose de déterminer la cellule courante à partir des


coordonnées fournies,
x et y, tout comme le dit Christophe Pasde.

Pour commencer, on va balayer toutes les cellules, de la


gauche vers la
droite et du haut vers le bas, en ajoutant la largeur de


chaque cellule
parcourrue jusqu'à ce que les positions x et y soient


atteintes.

Une fois la cellule déterminée, on va se positionner


dessus en forçant les
propriétés col et row.

Après, il ne reste qu'à remplir la cellule...

Voici un exemple d'intégration :

Private Sub Form_Load()
With MSFlexGrid1
.Cols = 10
.Rows = 10
.FixedRows = 0
.FixedCols = 0
.SelectionMode = flexSelectionFree
End With

End Sub



Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift


As Integer, x As
Single, y As Single)
Dim X1 As Integer
Dim Y1 As Integer
Dim X2 As Integer
Dim Y2 As Integer
Dim XCol As Integer
Dim YCol As Integer

If Button = vbRightButton Then

With MSFlexGrid1
X1 = .LeftCol
Y1 = .TopRow
X2 = 0
Y2 = 0
'
' --- On détermine la position horizontale à


partir de la
position X fournie
'
Do
If X2 + .ColWidth(X1) > x Then
XCol = X1
Exit Do
End If
X2 = X2 + .ColWidth(X1)
X1 = X1 + 1
Loop
'
' --- On détermine la position verticale à


partir de la position
Y fournie
'
Do
If Y2 + .RowHeight(Y1) > y Then
YRow = Y1
Exit Do
End If
Y2 = Y2 + .RowHeight(Y1)
Y1 = Y1 + 1
Loop
'
' --- Ensuite, on se positionne sur la


cellule et on la
colorie...
'
.Col = XCol
.Row = YRow
.CellBackColor = RGB(255, 0, 0)

End With
End If
End Sub

Attention : ce code ne supporte pas les entêtes fixes.


(fixedRows et
firedCols). Si vous devez les exploiter, il faut penser à


mettre à jour ce
code.

Bons tests,

Frédéric Puteaux.

"JCM" a écrit dans le


message de news:
3d8901c49fe8$99962700$
Bonjour à tous

Quand je fais un click droit souris sur une cellulle d'un
MSFlexgrid, je veux changer la couleur de celle-ci.

Avec le code ci-dessous les coordonnées de la cellulle ne
sont celles ou j'ai clické, Pouvez-vous me dire ou est le
problème

Private Sub FGPlanning_MouseDown(Button As Integer, Shift
As Integer, x As Single, Y As Single)

If Button And vbRightButton Then ' c'est le clic droit
FGPlanning.Row = FGPlanning.RowSel
FGPlanning.col = FGPlanning.ColSel
FGPlanning.CellBackColor = &HFFFFFF
FGPlanning.Text = ""
End If
End Sub

Merci de vos réponses
Cordialement
JCM


.





.