Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Deplacer un contrôle Frame

3 réponses
Avatar
AT
Bonjour,

J'utilise le code suivant pour permettre à l'utilisateur de déplacer
une frame de gauche à droite avec une butée de chaque coté. Le problème
est qu'arrivé à un bout le contrôle devient double avec son fantôme qui
continu à se deplacer comme si de rien n'était.

Comment faire pour éliminer cet effet ?


Private Sub frame6_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Frame6.Left > 7380 Then Frame6.Left = 7380: Exit Sub
If Frame6.Left < 80 Then Frame6.Left = 80: Exit Sub

If Button = 1 Then
Frame6.Left = (X * 1.2) + (Frame6.Left / 2)

Frame6.Refresh
End If


End Sub

Merci!

3 réponses

Avatar
LE TROLL
Bonjour,

Ceci :

Sub frame6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button <> 1 Then Exit Sub
Frame6.Left = (X * 1.2) + (Frame6.Left / 2)
If Frame6.Left > 7380 Then Frame6.Left = 7380
If Frame6.Left < 80 Then Frame6.Left = 80
Frame6.Refresh
Form1.Refresh
End Sub

Je crois que c'est normal, c'est le système qui fait ça quand on
dépasse, il suffit de relâcher et ça redevient normal.
Par contre le mécanisme de positionnement n'est pas bon, dans la mesure
où il faut tenir compte de trois éléments variables, le curseur cliquant, le
left de la frame, et la largeur de la frame pour avoir son (right)... Un
"form1.refresh" améliore le grisage...

Pour faire ça, pour la compréhension de la mise au point tu affiches en
permanence dans des textBox X, Y, Form.Left, Frame.Left et Right(Frame),
ainsi tu comprndras vite ce qu'il faut faire en fontion de ces éléments...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"AT" a écrit dans le message de
news:4ac30d13$0$904$
Bonjour,

J'utilise le code suivant pour permettre à l'utilisateur de déplacer une
frame de gauche à droite avec une butée de chaque coté. Le problème est
qu'arrivé à un bout le contrôle devient double avec son fantôme qui
continu à se deplacer comme si de rien n'était.

Comment faire pour éliminer cet effet ?


Private Sub frame6_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Frame6.Left > 7380 Then Frame6.Left = 7380: Exit Sub
If Frame6.Left < 80 Then Frame6.Left = 80: Exit Sub

If Button = 1 Then
Frame6.Left = (X * 1.2) + (Frame6.Left / 2)

Frame6.Refresh
End If


End Sub

Merci!




Avatar
AT
Après mûre réflexion, LE TROLL a écrit :
Bonjour,

Ceci :

Sub frame6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button <> 1 Then Exit Sub
Frame6.Left = (X * 1.2) + (Frame6.Left / 2)
If Frame6.Left > 7380 Then Frame6.Left = 7380
If Frame6.Left < 80 Then Frame6.Left = 80
Frame6.Refresh
Form1.Refresh
End Sub

Je crois que c'est normal, c'est le système qui fait ça quand on dépasse,
il suffit de relâcher et ça redevient normal.



En fait, la solution qui rend l'affichage "propre" est la suivante:

===========
If Frame6.Left > 7000 Then Frame6.Enabled = False
If Frame6.Left < 80 Then Frame6.Enabled = False

If Button = 1 Then
Frame6.Left = (X * 1.4) + (Frame6.Left / 2)

End If

Frame6.Enabled = True

exit sub

==========


Sinon, pour le positionnement, c'est vrai qu'il faut ajouter le
différentiel entre la position du pointeur et le bord du contrôle. Mais
la question n'est pas là.
Avatar
LE TROLL
Bonjour,

Excellent, je n'avais pas pensé à ça, ben si ça marche, tant mieux, si
un jour j'en ai besoin je tenterai de m'en souvenir...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"AT" a écrit dans le message de
news:4ac33365$0$1006$
Après mûre réflexion, LE TROLL a écrit :
Bonjour,

Ceci :

Sub frame6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If Button <> 1 Then Exit Sub
Frame6.Left = (X * 1.2) + (Frame6.Left / 2)
If Frame6.Left > 7380 Then Frame6.Left = 7380
If Frame6.Left < 80 Then Frame6.Left = 80
Frame6.Refresh
Form1.Refresh
End Sub

Je crois que c'est normal, c'est le système qui fait ça quand on
dépasse, il suffit de relâcher et ça redevient normal.



En fait, la solution qui rend l'affichage "propre" est la suivante:

=========== >
If Frame6.Left > 7000 Then Frame6.Enabled = False
If Frame6.Left < 80 Then Frame6.Enabled = False

If Button = 1 Then
Frame6.Left = (X * 1.4) + (Frame6.Left / 2)

End If

Frame6.Enabled = True

exit sub

========== >


Sinon, pour le positionnement, c'est vrai qu'il faut ajouter le
différentiel entre la position du pointeur et le bord du contrôle. Mais la
question n'est pas là.