IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Effet à l'aide de la fonction GetCursorPos


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Effet à l'aide de la fonction GetCursorPos
    Salut aujourd'hui c mon premier sujet alors je veux votre avis sur ce que j'ai posé
    L'effet que j'ai crée consiste à utiliser la fonction GetCursorPos pour créer un effet de changement de couleur l'or du pointage du cruseur sur le texte la form vas contenir :

    -un timer dont le nom est timer1 et la propriété "Interval=1"
    -Un label dont le nom label1 et avec la propriéte "AutoSize= true"
    -Un bouton dont le nom et command1


    le principe de l'effet et trés bon j'explqiue à chauqe milliem de seconde on détermine les cordonées du curseur à l'aide de la fonction GetCursorPos ensuite on vérifie si les cordonée du curseur sont égale à celles du label alors on change le couleur du texte sinon on donne le noire comme couleur pour le texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     'déclaration de l'api qui vas nous aider à conaitre les coordonés du curseur
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
    Private Sub Command1_Click()
    End ' c'est pour fermé l'appliccation
    End Sub
    Private Sub Timer1_Timer()
        Dim point As POINTAPI
        GetCursorPos point ' appele de la fonction qui vas nous donner les coordonés
     
        If (point.X >= 675 And point.X <= 748) And (point.Y >= 482 And point.Y <= 490) Then ' si le curseur est pointer sur le label
     
            Me.Label1.ForeColor = &HFFFF00 'changement du couleur
     
        Else ' Si le curseur n'est pas pointer sur le label
     
            Me.Label1.ForeColor = &H0& 'le label reprend la couleur initiale
     
        End If
     
    End Sub

    dans le lien suivante vous trouver le projet que j'ai réaliser :
    http://www.usaupload.net/d/mqrgvdffgc9

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    Tiens !

    L'évènement MouseMove ne suffit pas, chez toi ?

    Au passage : un End pour fermer ton appli ? Pas très adroit, çà !... pas du tout, même !

    Bonne continuation....

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Et ça fonctionne ? explique, j'ai pas de décompresseur Rar, j'ai pas su lire ton fichier.
    UcFoutu, et pour savoir qu'on n'est plus sur le contrôle ?
    A+

  4. #4
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    UcFoutu, et pour savoir qu'on n'est plus sur le contrôle ?
    MouseMove sur le Form ?

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par zazaraignée Voir le message
    Bonjour Zazaraignée, eh oui, j'y ai pensé, mais si le label est dans un Frame... pas de problème MouseMove du frame, eh oui.. et si le label se trouve sur le bord du frame , mousemove sur la forme et si le label se trouve sur le bord de la forme et que l'ont quitte directement sur le screen, etc..etc..
    A+

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    on sait parfaitement dans quel conteneur on insère le label
    il suffit alors d'utiliser le MouseMove de ce container et, si le label se trouve près d'un bord du dit conteneur, également le MouseMove du conteneur adjacent

    Quant à la sortie possible de la Form, je ne vois pas où est le problème puisque l'utilisateur se trouverait alors hors de l'application (qui n'a pas à réagir dans cette situation) et les choses seraient rétablies à son retour da,s la fenêtre de l'application
    Les plus exigeants pourront (mais je n'aime pas du tout ce procédé) "confiner" le curseur à l'intérieur de la fenêtre de l'application (facile mais un peu ... bêtat...)

    on peut également utiliser les coordonnées X et Y au MouseMove pour faire réagir différemment selon qu'on est suffisamment ou insuffisamment à l'intérieur du Label ...

    Bref ... on ne sort pas le marteau pilon pour casser une noix et on évite la présence d'un timer s'il n'est pas indispensable.

    Bonne continuation...

    EDIT : et s'il faut vraiment procéder avec un timer, alors et pour l'amour du développement : on choisit un contrôle avec Hwnd (Frame, PictureBox, TextBox...) que l'on utilise à la place du Label et on procède autrement que par comparaison d'une position du curseur avec les coordonnées du rectangle occupé par le Label ! (ce n'est ni propre ni élégant)

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Re,

    Pour rectifier !

    Si malgré tout on tient à utiliser GetCursorPos, il n'est nul besoin d'un Timer si l'on accepte de subsituer à l'emploi d'un Label celui d'un contrôle doté de Hwnd.
    Il suffit alors d'utiliser l'évènement MouseMove conjointement avec la fonction GetCursorPos et la fonction ScreenToClient (de User32.dll elle également, comme GetCursorPos) , pardi ... et nous n'aurons alors plus besoin d'utiliser les coordonnées du rectangle dont on veut savoir s"il est ou non survolé...

    Mais je répète que tout cela est démesuré pour bien peu !
    Bonne continuation ...

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos réponse mais n"oublié que chui encore Débutant en VB et j"ai posé ce exemple pour avoire vos avis en tous cas merci pour l'aider du mousemove je vais l'essayé

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Re,

    Pour rectifier !

    Si malgré tout on tient à utiliser GetCursorPos, il n'est nul besoin d'un Timer si l'on accepte de subsituer à l'emploi d'un Label celui d'un contrôle doté de Hwnd.
    Il suffit alors d'utiliser l'évènement MouseMove conjointement avec la fonction GetCursorPos et la fonction ScreenToClient (de User32.dll elle également, comme GetCursorPos) , pardi ... et nous n'aurons alors plus besoin d'utiliser les coordonnées du rectangle dont on veut savoir s"il est ou non survolé...

    Mais je répète que tout cela est démesuré pour bien peu !
    Bonne continuation ...
    STP tu peux m'expliquer un peux l'idée parceque je conais pas bien la fonc tion ScreenToClien

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Re,

    Bourquoi toujours emprunter les chemins compliqués alors que les chemins simples (et à ton niveau, surtout) sont là ?
    Je te l'ai dit, non ? Il te suffit d'utiliser une tolérance interne de déclenchement...
    Attends (n'interviens pas et attends)... je te "fabrique la chose" en 2 coups de cueuillère à pot.
    Ne bouge pas ...


    EDIT : Voilà !
    J'ai ici décidé d'une tolérance de 100 twips (pour une Form dont le scalemode est en twips). Tu peux modifier à ton goût la valeur de cette constante tolerance ...
    Si ton scalemode est en pixel ou en points, adapte cette constante (dont la valeur est alors bien plus petite)


    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
       Const tolerance As Integer = 100 ' mets ici la tolérance qui te convient ...
       Dim couleue As Long
       If X >= tolerance And X <= Label1.Width - tolerance And _
       Y >= tolerance And Y <= Label1.Height - tolerance Then
         couleur = vbRed
       Else
         couleur = vbBlack
       End If
       Label1.ForeColor = couleur
    End Sub
    Pas compliqué, non ?

    Amitiés et bonne continuation ....

    Edit : corrige donc Dim couleue par Dim couleur, hein... (j'ai frappé trop vite)

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    merci Pour le code mais j'ai déja réliser cette solution seulement je veux conaitre la fonction ScreenToClient marche

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Pellodu21 Voir le message
    merci Pour le code mais j'ai déja réliser cette solution seulement je veux conaitre la fonction ScreenToClient marche
    tu peu déjà regarder dans la ici :

    Comment récupérer les coordonnées de la souris ?


Discussions similaires

  1. Regroupement de code à l'aide d'une fonction...
    Par JeremieT dans le forum Access
    Réponses: 6
    Dernier message: 09/01/2006, 10h53
  2. Où trouver l'aide sur les fonctions de l'API Windows ?
    Par psidonio dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 08/11/2005, 14h28
  3. [CR]Aide sur les fonction de date et plage de date.
    Par Job dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/11/2005, 09h19
  4. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40
  5. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo