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 :

Bloquer/Débloquer evenement MouseMove


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Par défaut Bloquer/Débloquer evenement MouseMove
    Bonjour,

    J'ai un label qui lorsque je passe dessus lui donne un aspect bouton, et au bout d'une seconde, reviens à son état original. Ca marche, mais avec l'évenement mousemove, lorsque je bouge la souris sur le label, la procédure est toujours appelé et donc mon label clignote entre aspect bouton/original. Je souhaite soit a la fin de la procédure de la procédure dans le form ou le module, bloqué l'evenement mousemove, et lorsque le timer débloqué l'évenement mousemove du label.

    J'ai cherché, peut-être pas assez, de solutions sur le site et sur internet

    Avez-vous une idée ?

    Voici la procédure dans mon form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call AspectBouton(Frm_Connexion, Label1, Tim_Label1)
    '        bloquer Ctl.MouseMove ??
    End Sub
     
    Private Sub Tim_Label1_Timer()
    Call AspectBouton(Frm_Connexion, Label1, Tim_Label1)
    '        débloquer Ctl.MouseMove ??
    End Sub

    Et la procédure du module appelée en vous passant les détails :
    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
    26
    27
    28
    29
    30
    31
    Option Explicit
    Public Const RELIEF = 1
    Public Const ENCADREMENT = 2
    Public CtlPasséDessus As Boolean 'on voit si on est passé ou non sur le controle
    Public iTim As Integer 'compte les secondes du timer lancé
     
    Public Const CouleurFondOriginale = &H8000000F
    Public Const CouleurFondTemporaire = &H80FFFF 'nimporte quelle couleur sauf la CouleurFondOriginale, ne se voit pas a l'écran, car sinon le label n'affiche plus le texte contenu
     
    Public Sub AspectBouton(Frm As Form, Ctl As Control, Tim As Timer)
     
    If CtlPasséDessus = False Then 'passage de la souris sur le controle, on envoi l'aspect bouton
       CtlPasséDessus = True
       Call Ombrage(Frm, Ctl, ENCADREMENT, 10, &H80000011) 'gris foncé
       Call Ombrage(Frm, Ctl, RELIEF, 10, &H80000005) '&H80000005) blanc vista '&H80000009) 'blanc W2000
       Tim.Enabled = True
    '        bloquer Ctl.MouseMove ??
     
     
    Else 'une seconde après l'aspect bouton, on revient à l'aspect original du controle
       iTim = iTim + 1 'on suppose que l'intervalle du Timer est à 1000 ms
       If iTim = 2 Then
          Call Ombrage(Frm, Ctl, ENCADREMENT, 10, &H8000000F) 'gris normal
          Call Ombrage(Frm, Ctl, RELIEF, 10, &H8000000F) 'gris normal
          Tim.Enabled = False
          CtlPasséDessus = False '1 seconde après le passage de la souris, retour a l'aspect initial du contrôle
          iTim = 0
    '         débloquer Ctl.MouseMove ??
       End If
    End If
    End Sub

    Bonne soirée

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Par défaut
    Bonjour,
    J'ai un label qui lorsque je passe dessus lui donne un aspect bouton, et au bout d'une seconde, reviens à son état original. Ca marche, mais avec l'évenement mousemove, lorsque je bouge la souris sur le label, la procédure est toujours appelé et donc mon label clignote entre aspect bouton/original
    D'abord ,je respecte ce que tu veuc faire, mais quel est l'interêt de faire ce genre de "truc".
    Peux-tu l'expliquer, merci?

    A+

  3. #3
    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
    Par défaut
    Bonsoir,

    la réponse de jclic me parait pleine de bon sens.
    Si toutefois tu y tiens, ===>> à toi de jongler avec l'aide d'une variable booléenne static. (c'est de la gymnastique et ce sera bien cher payer pour ... quoi ? )

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Par défaut
    Je vais essayer les variables statiques, je vais essayer de trouver de la doc la dessus, mais si c'est trop compliqué, je laisse tomber.

    Si toutefois tu y tiens, ===>> à toi de jongler avec l'aide d'une variable booléenne static. (c'est de la gymnastique et ce sera bien cher payer pour ... quoi ? )
    Je pensais que ma variable CtlPasséDessus aurait suffit, mais non

    On a un projet IHM, et d'après nos directives que l'on ait censé respecté, on doit avoir un maximum d'uniformisation dans les endroits où l'on clique. Donc on va essayer d'avoir un maximum de bouton et un minimum de label clicables (fonctionnant comme des liens). Je sais c'est assez bizarre
    Le but est que l'utilisateur (le plus lambda qui soit...), sache quoi faire.

    C'est sur le fil d'ariane de mes forms que je fais cet aspect bouton.

    C'est sûr que le mieux et le plus logique, c'est d'avoir un fond seul qui change de couleur quand la souris passe dessus, comme sur un menu sur de site web (ex:lequipe.fr).

    Le plus simple est de remplacer le label "Accueil" par un bouton, et le reste du fil en bouton, ou toujours en label.

    Merci pour vos réponses en tout cas !

  5. #5
    Expert éminent


    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
    Par défaut
    pas besoin de variable static, tu as déjà ta variable globale :
    Citation Envoyé par kir4000 Voir le message
    ...
    Je pensais que ma variable CtlPasséDessus aurait suffit, mais non
    ...
    tu peu te servir de cette variable pour "inhiber" ton mouse move :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Not CtlPasséDessus Then Call AspectBouton(Frm_Connexion, Label1, Tim_Label1)
    '        bloquer Ctl.MouseMove ??
    End Sub
    cela devrai "marchoté" même si la façon d'utiliser le timer n'est pas terrible..: plutôt que l'utiliser (déclenchement toutes les secondes , tous le temps) j'aurai plutôt vu une activation du timer lors du changement d'aspect du label en bouton .. et une "dé-sactivation" lorsqu'il déclenche et repasse en label.

  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
    Par défaut
    Re,

    Je n'utiliserais personnellement pas le contrôle Timer du tout.
    J'utiliserais par contre une variable static et la fonction Timer.

    Exemple à main levée :
    Ici : un label1 dont le caption doit passer de "toto" à "aaaa" et réciproquement lors du mousemove, mais toutes les secondes seulement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    static quand As long
      If quand = 0 then quand = timer: Exit Sub
      If timer - quand >= 1 then
         If label1.caption = "toto" then label1.caption = "aaaa" else label1.caption = "toto"
      end ff
      quand = timer
    (à mettre dans l'évènement mousemove de label1.

  7. #7
    Expert éminent


    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
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    ...
    Exemple à main levée :
    Ici : un label1 dont le caption doit passer de "toto" à "aaaa" et réciproquement lors du mousemove, mais toutes les secondes seulement.
    ....
    faut pas confondre ! le probléme à kir4000 c'est

    :
    Citation Envoyé par kir4000
    ...la procédure est toujours appelé et donc mon label clignote entre aspect bouton/original.
    ce n'est pas ce qu'il veut faire !!!!!

  8. #8
    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
    Par défaut
    Re,

    je ne vois pas où est le problème ...
    Il suffit de modifier (dans mon exemple) la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If label1.caption = "toto" then label1.caption = "aaaa" else label1.caption = "toto"
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call AspectBouton(Frm_Connexion, Label1, Tim_Label1)
    et de supprimer totalement le contrôle timer

  9. #9
    Expert éminent


    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
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Re,

    ...
    Il suffit de modifier (dans mon exemple) la ligne :...
    cela ne suffit pas ....

  10. #10
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Personellement, j'auris utilisé la propriété tag du label, mais c'est une question de goût je suppose.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Par défaut Solution choisie
    Citation Envoyé par bbil Voir le message
    pas besoin de variable static, tu as déjà ta variable globale :

    tu peu te servir de cette variable pour "inhiber" ton mouse move :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Not CtlPasséDessus Then Call AspectBouton(Frm_Connexion, Label1, Tim_Label1)
    '        bloquer Ctl.MouseMove ??
    End Sub
    cela devrai "marchoté" même si la façon d'utiliser le timer n'est pas terrible..: plutôt que l'utiliser (déclenchement toutes les secondes , tous le temps) j'aurai plutôt vu une activation du timer lors du changement d'aspect du label en bouton .. et une "dé-sactivation" lorsqu'il déclenche et repasse en label.
    Merci

    C'était pas si compliqué, mais j'y avais pas pensé direct

    Effectivement, la solution de ucfoutu n'aurait pas résolu le probème du clignotement du label (un texte ne clignoterait pas il me semble), mais merci quand même.
    J'ai utilisé pas mal de exit sub, mais mon projet ne doit pas en comporter.

    pour être exhaustif, voici le module complet appelé : les procédures Aspect bouton (elle peut être améliorée mais ça marche déjà très bien maintenant dans mon cas) et la procédure Ombrage récupéré sur ce site je crois :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Option Explicit
    Public Const RELIEF = 1
    Public Const ENCADREMENT = 2
    Public CtlPasséDessus As Boolean 'on voit si on est passé ou non sur le controle
    Public iTim As Integer 'compte les secondes du timer lancé
     
    Public Const CouleurFondOriginale = &H8000000F
    Public Const CouleurFondTemporaire = &H80FFFF 'nimporte quelle couleur sauf la CouleurFondOriginale, ne se voit pas a l'écran, car sinon le label n'affiche plus le texte contenu
     
    Public Sub AspectBouton(Frm As Form, Ctl As Control, Tim As Timer)
     
    If CtlPasséDessus = False Then 'passage de la souris sur le controle, on envoi l'aspect bouton
       CtlPasséDessus = True
       Call Ombrage(Frm, Ctl, ENCADREMENT, 10, &H80000011) 'gris foncé
       Call Ombrage(Frm, Ctl, RELIEF, 10, &H80000005) '&H80000005) blanc vista '&H80000009) 'blanc W2000
       Tim.Enabled = True
     
    Else 'une seconde après l'aspect bouton, on revient à l'aspect original du controle
       iTim = iTim + 1 'on suppose que l'intervalle du Timer est à 1000 ms
       If iTim = 2 Then
          Call Ombrage(Frm, Ctl, ENCADREMENT, 10, &H8000000F) 'gris normal
          Call Ombrage(Frm, Ctl, RELIEF, 10, &H8000000F) 'gris normal
          Tim.Enabled = False
          CtlPasséDessus = False '1 seconde après le passage de la souris, retour a l'aspect initial du contrôle
          iTim = 0
       End If
    End If
    End Sub
     
    'Ombrer un controle, notamment lors des survols de souris sur un lbl clicable
    Public Sub Ombrage(Feuille As Form, Ctrl As Control, Effet As Integer, OmbreLarg As Integer, OmbreCoul As Long)
     
    Dim CouleurOmbre As Long
    Dim LargeurOmbre As Integer
    Dim Largeur As Integer
    Dim Taille As Integer
     
    LargeurOmbre = OmbreLarg
    CouleurOmbre = OmbreCoul
    Largeur = Feuille.DrawWidth
    Taille = Feuille.ScaleMode
    Feuille.DrawWidth = 1
     
    Select Case Effet
       Case ENCADREMENT
          Ctrl.BackColor = CouleurFondTemporaire
          Feuille.Line (Ctrl.Left + LargeurOmbre, Ctrl.Top + LargeurOmbre)- _
          Step(Ctrl.Width - 1, Ctrl.Height - 1), CouleurOmbre, BF
          Ctrl.BackColor = CouleurFondOriginale
       Case RELIEF
          Ctrl.BackColor = CouleurFondTemporaire
          Feuille.Line (Ctrl.Left - LargeurOmbre, Ctrl.Top - LargeurOmbre)- _
          Step(Ctrl.Width - 1, Ctrl.Height - 1), CouleurOmbre, BF
          Ctrl.BackColor = CouleurFondOriginale
    End Select
     
    Feuille.DrawWidth = Largeur
    Feuille.ScaleMode = Taille
    End Sub
    et le nouveau code dans le form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub lbl_accueil_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Not CtlPasséDessus Then Call AspectBouton(Frm_RechercheSansResultat, lbl_accueil, tim_lbl_accueil)
    End Sub
     
    Private Sub tim_lbl_accueil_Timer()
    Call AspectBouton(Frm_RechercheSansResultat, lbl_accueil, tim_lbl_accueil)
    End Sub
    Je ne connais pas la propriété tag, à voir peut-être plus tard...

    Merci à vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Evenement MouseMove et iFrame
    Par CAML dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/09/2006, 07h08
  2. MS Flex Grid et evenement MouseMove: info bulle avec photo
    Par jadey dans le forum VB 6 et antérieur
    Réponses: 31
    Dernier message: 03/08/2006, 08h17
  3. [Port] Bloquer/Débloquer un port
    Par TheBaeK1 dans le forum Réseau
    Réponses: 12
    Dernier message: 13/05/2006, 12h56
  4. [VB6] Evenement MouseMove
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 31/03/2006, 16h57
  5. Evenement MouseMove sur Listview
    Par anikeh dans le forum Access
    Réponses: 10
    Dernier message: 19/12/2005, 10h09

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