1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    10 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 10 688
    Points : 16 014
    Points
    16 014

    Par défaut Détecter l'entrée et surtout la sortie d'un formulaire de la souris ?

    Bonjour à toutes et à tous et merci de votre temps et de votre aide.

    J'ai un formulaire ouvert en mode Non Modal (vbModeless).
    Je suis capable avec Mous-Move de savoir qu'actuellement je suis dans le formulaire mais pas de détecter le moment où j'entre et surtout celui où j'en sort.

    Mon but est de réagir en affichant l'adresse de la sélection actuelle (plus d'autres infos) dés que l'utilisateur survol mon formulaire puis s'il quitte le formulaire faire disparaître ces informations.

    Quelqu'un a-t'il déjà programmé cela ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    octobre 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2012
    Messages : 45
    Points : 27
    Points
    27

    Par défaut

    Je n'ai peut-être pas bien compris ce que vous vouliez faire.
    Vous pouvez lancer un code à partir de la détection de mouvement.
    Par exemple, j'ai un USF sur lequel j'ai des boutons. Lorsque je passe la souris sur les boutons, un explicatif de la fonction s'affiche dans une zone de texte (Label1) et les caractères du bouton passent en italique. Tout redevient normal (le texte s'efface et les caractères redeviennent normaux) lorsque je sort du bouton (en fait quand je passe dans le frame de l'USF), et ainsi de suite.

    Pour le frame:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
    ByVal x As Single, ByVal y As Single)
    RAZItaliqueGras
    End Sub
    Pour un bouton (j'en ai 8 dans l'USF) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
    ByVal x As Single, ByVal y As Single)
    With Me
        With .CommandButton1.Font
            .Bold = True
            .Italic = True
        End With
        With .Label1
            .Caption = "Mon texte explicatif à afficher !"
        End With
    End With
     
    End Sub
    Et pour la remise à zéro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub RAZItaliqueGras()
    'Remise à zéro des textes des boutons en italique et gras
    'et effacement du Label1
    For Numbout = 1 To 8
        With Me("CommandButton" & Numbout).Font
            .Bold = False
            .Italic = False
        End With
    Next
    Me.Label1.Caption = ""
     
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 528
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 528
    Points : 16 713
    Points
    16 713
    Billets dans le blog
    1

    Par défaut re

    bonjour

    le soucis c'est que quand tu sors du formulaire tu n'a plus rien (aucun evenement a associer ) pour tester ta position souris
    si ce n'est que par une boucle infini interruptible

    la seulle possibilité que je connaisse et qui n'alourdirait pas l'app c'est la position X/Y dans l'evenement mosemove de l'usf

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    '5 peut etre une marge insufisante selon la vitesse du deplacement de la souris  l'augmenter le cas echeant
    'apres voir si il n'y a pas des controls a ces enplacements scela complique un peu la chose mais en gros
    ' faire pareil dans les evenement mousemove de ces controls
    ok = ""
    If Y > 5 And Y < Me.InsideHeight - 5 Then
    If X > 5 And X < Me.InsideWidth - 5 Then ok = [A1] Else ok = ""
    End If
     TextBox1 = ok
    End Sub
    Nom : demo.gif
Affichages : 24
Taille : 201,7 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    10 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 10 688
    Points : 16 014
    Points
    16 014

    Par défaut

    Bonjour.

    Merci :a vous.

    @Mic13710 , c'est au niveau du formulaire lui-même que je souhaite travailler, pas pour un contrôle en particulier.

    @patricktoulon , je pense que c'est ce dont j'ai besoin. Je n'avais pas pensé à une idée de marge.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Expert éminent
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    4 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 4 556
    Points : 7 948
    Points
    7 948

    Par défaut

    Bonjour
    Une solution parfaite existe bel et bien, mais passe par un hooking et donc l'utilisation de fonctions de l'Api de Windows.
    Et quand on dit "hooking", on dit nécessité d'une parfaite maîtrise de ce que l'on fait (notamment en mode création et tests) --->> sinon --->> plantage assuré, voire dégâts assurés.

    Es-tu certain de ce la vocation d'un tableur est ce que tu cherches à en tirer ? (la réponse est bien évidemment NON).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro). Ne m'en proposez donc pas.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    10 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 10 688
    Points : 16 014
    Points
    16 014

    Par défaut

    Bonjour.

    Le code fonctionne mais si on déplace la souris vraiment vite (ex : du milieu du formulaire à une cellule) l'événement sur move n'attrape pas la marge et les données restent là.

    Je pense que je vais faire un bouton finalement.

    Merci à tous.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 528
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 528
    Points : 16 713
    Points
    16 713
    Billets dans le blog
    1

    Par défaut re

    re
    oui je l'ai préciser pour la marge
    après oui comme dis jacques :Hooker ,mais c'est costaud beaucoup de ramdam pour au final pas grand chose
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 528
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 528
    Points : 16 713
    Points
    16 713
    Billets dans le blog
    1

    Par défaut re

    tiens regarde celle la elle devrait faire ton affaire
    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
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Integer, ByVal yPoint As Integer) As Integer
    Private Type POINTAPI: X As Long: Y As Long: End Type
    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    '5 peut etre une marge insufisante selon la vitesse du déplacement de la souris  l'augmenter le cas echeant
    'après voir si il n'y a pas des controls a ces emplacements cela complique un peu la chose mais en gros
    ' faire pareil dans les évènement mousemove de ces controls
        Dim pos As POINTAPI
        GetCursorPos pos
        Handle = WindowFromPoint(pos.X, pos.Y)
        ok = ""
        If Y > 5 And Y < Me.InsideHeight - 5 Then
            If X > 5 And X < Me.InsideWidth - 5 Then ok = [A1] Else ok = ""
        End If
        TextBox1 = ok
        t = Timer
        Do: DoEvents: X = Timer - t: Loop While X < 0.1
        GetCursorPos pos
        If WindowFromPoint(pos.X, pos.Y) <> Handle Then TextBox1 = ""
    End Sub
    ya pas photo ca patch
    Nom : demo.gif
Affichages : 22
Taille : 109,2 Ko
    pour éliminer le raté par rapport a la vitesse de la souris
    on fait une pause de 10 millisecondes
    ps: j'aurais pu utiliser l'api sleep pour la pause c'est pareil
    et on test le handle avec windowfrompoint si c'est pas le me qu'au départ on vide le textbox


    ps: j'ai mémé essayé 0.03(30milisecondes) ca marche parfaitement bien

    et meme simplifié la chose
    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
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Integer, ByVal yPoint As Integer) As Integer
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Type POINTAPI: X As Long: Y As Long: End Type
    '
    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        TextBox1 = [A1]
        Dim pos As POINTAPI
        GetCursorPos pos
        Handle = WindowFromPoint(pos.X, pos.Y)
        t = Timer
        Do: DoEvents: X = Timer - t: Loop While X < 0.03
        GetCursorPos pos
        If WindowFromPoint(pos.X, pos.Y) <> Handle Then TextBox1 = ""
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    10 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 10 688
    Points : 16 014
    Points
    16 014

    Par défaut

    Bonjour patricktoulon et désolé du délais.

    J'ai revu mon interface et je ne pourrais pas utiliser ton code car mon utilisateur pourrait changer de page alors que je dois conserver les informations.

    Je te remercie grandement pour tes efforts qui me seront surement très utiles dans le future car c'est un problème que j'ai rencontré plusieurs et qui m'avait fait renoncer à utiliser les formulaires.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 528
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 528
    Points : 16 713
    Points
    16 713
    Billets dans le blog
    1

    Par défaut re

    Citation Envoyé par marot_r Voir le message
    Bonjour patricktoulon et désolé du délais.

    J'ai revu mon interface et je ne pourrais pas utiliser ton code car mon utilisateur pourrait changer de page alors que je dois conserver les informations.

    Je te remercie grandement pour tes efforts qui me seront surement très utiles dans le future car c'est un problème que j'ai rencontré plusieurs et qui m'avait fait renoncer à utiliser les formulaires.

    A+
    bonjour
    j 'avoue ne pas comprendre ce que tu souhaite vraiment

    il faudrait en dire plus absolument rien ne peut être perdu ou être retrouvé même en changeant de page( userfom ou autre )
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : résolu: ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/03/2016, 10h33
  2. Exécutable qui attend la touche entrée pour produire ses sorties
    Par meufeu dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 09/10/2015, 20h24
  3. Réponses: 5
    Dernier message: 24/04/2010, 23h10
  4. REGEXP pour détecter chiffres entre parenthèses
    Par noyau dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/01/2010, 11h18
  5. Probleme audio: entrée relié a la sortie
    Par amine_en_france dans le forum Windows XP
    Réponses: 4
    Dernier message: 14/12/2007, 12h34

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