Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOUSEOUTOFWINDOW() AVEC LES API WINDOWS


Information sur la source

Catégorie :API Niveau : Débutant Date de création : 20/05/2002 Date de mise à jour : 20/05/2002 21:10:48 Vu : 1 666

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Fonction qui permet de savoir quand le curseur de la souris quitte une fenêtre ou entre dans une fenêtre  
 

Source

  • '----- DANS UN MODULE -----
  • '***** TYPE UTILISE PAR L'API GETWINDOWRECT() *****
  • Private Type RECT
  • Left As Long
  • Top As Long
  • Right As Long
  • Bottom As Long
  • End Type
  • '***** TYPE UTILISE PAR L'API GETCURSORPOS() *****
  • Private Type POINTAPI
  • X As Long
  • Y As Long
  • End Type
  • '***** API POUR OBTENIR LES COORDONNEES DE LA FENETRE *****
  • Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  • '***** API POUR OBTENIR LES COORDONNEES DU CURSEUR *****
  • Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  • '***** FONCTION DETERMINANT SI LE CURSEUR EST DANS LA FENETRE OU NON
  • Public Function MouseOutOfWindow(handle As Long) As Boolean
  • Dim R As RECT 'déclaration de la variable qui reçoit les coordonnées de la fenêtre
  • Dim Pos As POINTAPI 'déclaration de la variable qui reçoit les coordonnées du curseur
  • GetWindowRect handle, R 'renvoie les coordonnées de la fenêtre dans <R>
  • GetCursorPos Pos 'renvoie les coordonnées du curseur dans <Pos>
  • 'renvoie FALSE si le curseur est dans la fenêtre, et TRUE si le curseur est à l'extérieur
  • MouseOutOfWindow = (Pos.X <= R.Left) Or (Pos.X >= R.Right) Or _
  • (Pos.Y <= R.Top) Or (Pos.Y >= R.Bottom)
  • End Function
  • '----- DANS LE CODE D'UNE FORM (POUR L'EXEMPLE) -----
  • Private Sub Timer1_Timer() 'interval=20
  • If MouseOutOfWindow(Form1.hwnd) Then
  • Form1.Caption = "En dehor"
  • Else
  • Form1.Caption = "A l'intérieur"
  • End If
  • End Sub
'----- DANS UN MODULE -----

'***** TYPE UTILISE PAR L'API GETWINDOWRECT() *****
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

'***** TYPE UTILISE PAR L'API GETCURSORPOS() *****
Private Type POINTAPI
    X As Long
    Y As Long
End Type

'***** API POUR OBTENIR LES COORDONNEES DE LA FENETRE *****
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
'***** API POUR OBTENIR LES COORDONNEES DU CURSEUR *****
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


'***** FONCTION DETERMINANT SI LE CURSEUR EST DANS LA FENETRE OU NON
Public Function MouseOutOfWindow(handle As Long) As Boolean

  Dim R As RECT	   'déclaration de la variable qui reçoit les coordonnées de la fenêtre
  Dim Pos As POINTAPI  'déclaration de la variable qui reçoit les coordonnées du curseur

    GetWindowRect handle, R   'renvoie les coordonnées de la fenêtre dans <R>
    GetCursorPos Pos              'renvoie les coordonnées du curseur dans <Pos>

    'renvoie FALSE si le curseur est dans la fenêtre, et TRUE si le curseur est à l'extérieur
    MouseOutOfWindow = (Pos.X <= R.Left) Or (Pos.X >= R.Right) Or _
                                    (Pos.Y <= R.Top) Or (Pos.Y >= R.Bottom)

End Function



'----- DANS LE CODE D'UNE FORM (POUR L'EXEMPLE) -----

Private Sub Timer1_Timer()                                       'interval=20
    If MouseOutOfWindow(Form1.hwnd) Then
       Form1.Caption = "En dehor"
    Else
      Form1.Caption = "A l'intérieur"
    End If
End Sub
  

Conclusion

La fonction marche pour tous les objets ayant la propriété [HWND]. Par exemple, on peut utiliser la fonction avec un bouton, une frame, une textbox, une picture, ...
  Ex.: MouseOutOfWindow(Command1.hwnd)
         MouseOutOfWindow(Frame1.hwnd)
         MouseOutOfWindow(Text1.hwnd)
         MouseOutOfWindow(Picture1.hwnd)
  
 

Commentaires et avis

signaler à un administrateur
Commentaire de vbmore le 21/05/2002 17:33:19

Connais-tu l'API TrackMouseEvent ?
Elle n'est pas présente dans W95, mais elle permet, grâce au subclassing, de détecté de events que VB6 ne reconnait pas ! (ex : sorite du curseur d'un contrôle, par exemple)

Seul pb : le subclassing implique un débugage casse-tête (beaucoup de contraite : pas de stop, pause, end. Execution de codes tout le temps) mais il sert à plaint de chose ( je parlerais et explique le subclassing en profofondeur ds 1 article qui sortita dans 1 ou 2 mois)

Bonne Prog. @+

signaler à un administrateur
Commentaire de vbmore le 21/05/2002 17:36:15

J'oubliais, pour les pressés, vous pouvez télécharger "ApiGuide" sur www.allapi.net : il contient beaucoup d'exemples dont celui de TrackMouseEvent

Vous pouvez aussi consulter la rubrique "Subclassing" sur ce site

A+

signaler à un administrateur
Commentaire de reivon le 22/05/2002 10:58:21

ba vla d'un code qu'est bien expliquer ! et merci pour l'adresse des api, ca sert !

signaler à un administrateur
Commentaire de rnosat le 02/01/2004 15:21:27

Super, ca marche bien ! !
Merci merci merci , et a bientot ... pour d'autres api !!
RnoSat

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.