DÉPLACER LA FORM EN CLIQUANT ET GLISSANT AVEC LA SOURIS
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
6 sept. 2003 à 12:02
cs_katman
Messages postés5Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention 2 septembre 2004
-
13 avril 2007 à 15:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_katman
Messages postés5Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention 2 septembre 2004 13 avril 2007 à 15:49
merci pour ton aide et A+
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 13 avril 2007 à 15:48
extraits de MSDN
The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window.
[...]
If a window has captured the mouse, this message is not posted. => d'où le ReleaseCapture
Parameters
wParam specifies the hit-test value indicating the position of the cursor hot spot
cs_katman
Messages postés5Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention 2 septembre 2004 13 avril 2007 à 15:42
je suis d'accord avec toi, mais dans la mesure ou l'on gère cette option au coup par coup et en fonction de form bien définie. Moi ma form dispose d'un MSCHart et d'un label donc en lourdeur pinuts.
c'est pour cela que je trouve que ta solution est plus simple que l'utilisation d'une API qui demande déjà forcément à la connaitre (ce qui n'est pas toujours évident) ensuite de comprendre comment elle marche et ce qu'elle veut comme paramètres (ce qui l'est encore moins).
Donc je maintient ta solution me convient mieux qu'une API.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 13 avril 2007 à 15:36
il ne faut pas avoir peur des API... pas de souci d'incompatibilité ici.
La version API dit :
"Si je clique dans la Form, considère que je clique dans la barre de titre."
derrière, Windows gère le déplacement de la fenêtre.
ici, on dit :
"Si je cliques sur la fenêtre, déplaces celle-ci"
Quelle différence me direz-vous ?
Et bien si l'utilisateur n'a pas activé l'option "Afficher le contenu des fenetres pendant leur déplacement (sous windows)", la fenetre sera affichée pendant son déplacement, puisque géré au fur et a mesure. Certaines machines peuvent donc subir des raffraichissement, surtout si la form est lourde (images, controles, etc...)
vaut mieux laisser Windows s'occuper de tout cela, non ?
Pour t'en convaincre, met le ScaleMode de ta Form sur '3 - pixels', et déplace ta fenetre...
cs_katman
Messages postés5Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention 2 septembre 2004 13 avril 2007 à 15:22
encore une source qu'elle est bonne et qui marche. en plus pas besoin d'api donc que du bonheur et une compatibilité à 200 % merci.
thedudul
Messages postés33Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention28 novembre 2004 30 sept. 2003 à 16:26
Parfait, ca marche du feu de dieu.
Je vous remerci tout les 2 ;-)
cs_Targhan
Messages postés13Date d'inscriptionvendredi 22 août 2003StatutMembreDernière intervention24 mai 2005 8 sept. 2003 à 23:19
Je trouve BlnDeplace un peu superflu...
Ne serait-il pas plus pratique de virer BlnDeplace de Form_MouseDown et Form_MouseUp et de le remplacer par If Button = .... dans Form_MouseMove ? Je pense que ça permet de selectionner plus finement le bouton avec lequel on souhaite déplacer la feuille.
rnosat
Messages postés132Date d'inscriptionmardi 31 octobre 2000StatutMembreDernière intervention 2 mai 2004 6 sept. 2003 à 14:45
super bien !
8/10
A+
cs_RJLFRANCE
Messages postés36Date d'inscriptionsamedi 17 août 2002StatutMembreDernière intervention16 septembre 2005 6 sept. 2003 à 13:55
Merci a vous deux, Je chercher depuis un moment ....
MERCI
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 6 sept. 2003 à 12:02
ou encore :
-----------------------------------------------------------------------
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "User32" ()
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
ReleaseCapture
SendMessage Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End If
End Sub
13 avril 2007 à 15:49
13 avril 2007 à 15:48
The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window.
[...]
If a window has captured the mouse, this message is not posted. => d'où le ReleaseCapture
Parameters
wParam specifies the hit-test value indicating the position of the cursor hot spot
HTCAPTION In a title bar.
------------
tout est là :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_nclbuttondown.asp
là :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_nchittest.asp
et là :
http://msdn2.microsoft.com/en-us/library/ms646261.aspx
13 avril 2007 à 15:42
c'est pour cela que je trouve que ta solution est plus simple que l'utilisation d'une API qui demande déjà forcément à la connaitre (ce qui n'est pas toujours évident) ensuite de comprendre comment elle marche et ce qu'elle veut comme paramètres (ce qui l'est encore moins).
Donc je maintient ta solution me convient mieux qu'une API.
13 avril 2007 à 15:36
La version API dit :
"Si je clique dans la Form, considère que je clique dans la barre de titre."
derrière, Windows gère le déplacement de la fenêtre.
ici, on dit :
"Si je cliques sur la fenêtre, déplaces celle-ci"
Quelle différence me direz-vous ?
Et bien si l'utilisateur n'a pas activé l'option "Afficher le contenu des fenetres pendant leur déplacement (sous windows)", la fenetre sera affichée pendant son déplacement, puisque géré au fur et a mesure. Certaines machines peuvent donc subir des raffraichissement, surtout si la form est lourde (images, controles, etc...)
vaut mieux laisser Windows s'occuper de tout cela, non ?
Pour t'en convaincre, met le ScaleMode de ta Form sur '3 - pixels', et déplace ta fenetre...
13 avril 2007 à 15:22
30 sept. 2003 à 16:26
Je vous remerci tout les 2 ;-)
8 sept. 2003 à 23:19
Ne serait-il pas plus pratique de virer BlnDeplace de Form_MouseDown et Form_MouseUp et de le remplacer par If Button = .... dans Form_MouseMove ? Je pense que ça permet de selectionner plus finement le bouton avec lequel on souhaite déplacer la feuille.
6 sept. 2003 à 14:45
8/10
A+
6 sept. 2003 à 13:55
MERCI
6 sept. 2003 à 12:02
-----------------------------------------------------------------------
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "User32" ()
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
ReleaseCapture
SendMessage Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End If
End Sub