Gérer le déplacement d'une fenêtre

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 915 fois - Téléchargée 26 fois

Contenu du snippet

Imaginer que vous avez une fenêtre avec la propriété BoderStyle à None, c'est à dire sans bordure et sans bare de titre (le truk bleu en haut =), mai ke vous vouliez kan mem la déplacer (tjs sans la bare de titre parcke sa fait pa bo ...)

Ben voila le but de mon source ...

Source / Exemple :


' mettez ce code dans une form et sa marche !
Private Click As Boolean ' déclaration des variables
Private ClickX As Long
Private ClickY As Long

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Click = True ' Pour savoir si le bouton de la souris est enfoncé ou pas
ClickX = 0    ' Parcque il faut maintenir le bouton enfoncé pour déplacé =)
ClickY = 0
ClickX = X ' récupération des coordonnées de la souris lors du click
ClickY = Y

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Click = True Then 'si la souris en enfoncé
 
    Dim VariationX As Long
    Dim VariationY As Long
    VariationX = X - ClickX ' calcul de la variation de déplacement de la souris sur X
    VariationY = Y - ClickY ' idem sur Y
    Me.Left = Me.Left + VariationX ' Attribution des nouvelles coordonées
    Me.Top = Me.Top + VariationY
End If

End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Click = False ' Pour savoir lorsque la souris n'est plus enfoncé
ClickX = 0
ClickY = 0
End Sub

Conclusion :


Voila, ce n'est pas grand chose mais sa peut servir !

A voir également

Ajouter un commentaire

Commentaires

Messages postés
70
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
1 octobre 2004

Pke ce code que tu nous a proposé foire à merveille pcpunch,

Ex :

Left=10
Top=10

Si je clique au point de coordonnées (1200,2500)
X=1200 et Y=2500

Par conséquent Left=1210 et Top=2510 (alors que cela devrait etre invariant)
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
3
Ok le gars pour l'api c mieux, mais pourquoi faire un si long code alors que l'on peu le faire en une seule ligne???

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Me.Move Me.Left + X, Me.Top + Y
End Sub
Messages postés
63
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
23 avril 2013

je ne vois pas trop quels commentaires supplémentaires Seraient nécessaires si ce n'est qu'au lieu de déplacer une Form on peut déplacer tout objet possédant une propriété Mouse...quelque chose, il suffit par exemple de remplacer :
SendMessage MaForm.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
Par
SendMessage Picture1.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
ou
SendMessage Image1.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
ou
SendMessage Command1.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
Etc..Etc.... Ca Va? Capito ? Si non je ne peux rien de plus.
Salut à tous.
Messages postés
60
Date d'inscription
dimanche 8 décembre 2002
Statut
Membre
Dernière intervention
1 juillet 2004

Ben merci pour l'info ... je savais pas ! =) Fo dire que cétai pa facile a trouvé l'api parce que g démandé de l'aide sur le tchat #programmation mai personne ne savait ... Alors g tapé ce code.

ClickX=0 et ClickY=0 c juste une sécurité au cas ou les valeurs serai modifiés, inutile peut etre pas =)

merci pour vos apréciations
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
Ce code est en effet à préferer.(bien que non comenté...)

En gros, on dit à Windows que l'on viens de cliquer.... sur la barre de titre. L'avantage est que le comportement de le fenêtre sera strictement le même.... coté ressources aussi....


petites questions sur ton code, tout de même ;)

pourquoi ces lignes ?
ClickX = 0
ClickY = 0
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.