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.NET Discussion :

Fenetre Dialog et Position Souris


Sujet :

VB.NET

  1. #1
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut Fenetre Dialog et Position Souris
    Salut All,

    J'ai un petit probleme que je n'arrive pas a resoudre.
    J'affiche un petit formulaire d'informations par appel : FormX.ShowDialog()
    Dans ce form, il y a un timer qui gere le temps d'affichage de celui-ci et qui le ferme automatiquement.
    Jusqu'a là aucun probleme et ca roule parfaitement.

    Par contre, je voudrais que si l'utilisateur pose la souris (enfin son curseur lol) sur ce meme form, le timer s'arrete et empeche la fermeture du meme coup.
    J'utilise donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub FormX_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseEnter
     
            TimerX.Enabled = False
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub FormX_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
     
            Beep()                                                ' Pour tester
            'Me.Close()
     
    End Sub
    Et bien le probleme est que lorsque je deplace le curseur, sans sortir de la fenetre, ca beepe sans arret !!!
    En fait, et en cherchant un peu, je me suis apercu que c'est la meme chose si je pose le beep dans MouseEnter ou dans MouseLeave.

    Conclusion, l'appel se produit lors du deplacmeent et non pas uniquement sur l'entree ou la sortie.
    Qq peut il m'aider a resoudre cela.
    Merci All.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le beep, il se produirait pas quand tu entres et sors des contrôles de la Form ?
    Parce que l'évènement MouseLeave de la Form se produit dès que la souris entre dans un contrôle enfant, pas seulement si tu sors du cadre de la form... idem pour MouseEnter, dès que la souris sort d'un contrôle enfant vers la Form, il se produit aussi

  3. #3
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Je viens de controler et on dirait bien que tu ai raison tom.
    L'evenement a bien l'air de se produire à chaque entree/sortie des controles de la form.
    Alors ce n'est pas cela qu'il me faut.

    Une idee sur comment faire pour mon probleme ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Jette un oeil à la propriété Capture
    Si tu la mets à true, la form capture les évènements de la souris même si le curseur est au dessus d'un contrôle enfant (un peu comme la propriété KeyPreview pour les évènements clavier). Par contre ça a l'air d'introduire des comportements bizarres... à tester

  5. #5
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Par contre ça a l'air d'introduire des comportements bizarres... à tester
    lol ca me donne pas trop envie d'y mettre les mains

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Ne serait-il pas plus simple de tester, par exemple chaque seconde, si la position de la souris est contenue dans les coordonnées de la form parente ?

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Et les événements d' activation/désactivation du formulaire ne correspondraient pas à ce que tu cherches ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  8. #8
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Si le but est simplement d'arrêter le timer, alors, tu ajoutes la gestion de l'event mouseenter via Addhandler en poitant sur un sub MouseEntrerProc (par exemple) et tu la supprimes dans la proc MouseEntrerProc qui arrête le timer via removehandler.

    PS : je déteste le sub biduleprod() handles me.machin...

    Cdt.

  9. #9
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Citation Envoyé par smyley Voir le message
    Ne serait-il pas plus simple de tester, par exemple chaque seconde, si la position de la souris est contenue dans les coordonnées de la form parente ?
    Ca peut etre une solution, vu que la fenetre ne peut pas etre deplace ...
    Je garde sous le coude.


    Citation Envoyé par SaumonAgile Voir le message
    Et les événements d' activation/désactivation du formulaire ne correspondraient pas à ce que tu cherches ?
    Qu'entends tu par activation/desactivation ?


    Citation Envoyé par olsimare Voir le message
    Si le but est simplement d'arrêter le timer, alors, tu ajoutes la gestion de l'event mouseenter via Addhandler en poitant sur un sub MouseEntrerProc (par exemple) et tu la supprimes dans la proc MouseEntrerProc qui arrête le timer via removehandler.
    Le probleme n'est pas tout a fait ca olsi, car gerer l'entree de la souris puis mettre sur off le timer, ca n'est pas vraiment un probleme meme si l'appel est multiple.
    Le probleme, c'est pour la sortie, car dans l'teat actuel, il se declenche à chaques sorties d'un controle de la form et non pas de la form elle-meme.

    Je me demande, si je mets un panel non visible recouvrant toute la fenetre et gerer la mouse enter/exit à partir de là ... j'ai pense à ca dans la nuit ... faut voir sur le terrain si ca peut fonctionner.

  10. #10
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Re.

    Tu veux aussi redémarrer le timer sur le leave ?

    Dans ce cas (c'est bestial comme solution), je passerais par un IMessageFilter.PreFilterMessage sur le WM_MOUSEMOVE (= 512) et je gérerais le enter et le leave "à la main" en testant que la souris est/n'est pas dans le .bound.

    Cdt.

  11. #11
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Citation Envoyé par olsimare Voir le message
    Tu veux aussi redémarrer le timer sur le leave ?
    Non, je veux fermer la dite fenetre.

  12. #12
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Re re Dany.

    Et bien pareil ! Un coup de prefiltermessage et hop !

    Edit : Faut aller dormir maintenant ...
    Cdt.

  13. #13
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Re re re Olsi,

    Bon pour le moment, ce que tu me dis, c'est du Chinois
    Vais aller faire un tour sur msdn voir un peu ce qu'il me dit sur ta proposition.
    Euh quoi que j'irais demain pas vu l'heure !!!
    Si jamais t'as un truc deja fait dans le genre pour m'aider, ca sera cool
    Bonne nuit all.

  14. #14
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Et bien ce que je propose ne marchera pas (désolé) si tu n'es pas dans une appli type MDI car le MessageFilter ne recevra pas le WM_MOUSEMOVE quand la souris est en dehors d'un objet de l'appli.

    Donc on pourrait passer par un Hook global, mais là c'est vraiment sortir l'artillerie trés lourde ...

    Par contre, en jouant sur la position de la souris lors du Leave, ça doit pouvoir se faire, avec un truc du genre :
    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
     
    Public Class Form1
        Public Sub New()
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            Me.BackColor = Color.Red
        End Sub
        Private Sub Form1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseEnter
            Me.BackColor = Color.Green
        End Sub
        Private Sub Form1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
            If Not MouseIsOnControl() Then
                Me.BackColor = Color.Red
            End If
        End Sub
     
        Private Function MouseIsOnControl() As Boolean
            Return Me.RectangleToScreen(Me.ClientRectangle).Contains(Control.MousePosition)
        End Function
    End Class
    Le seul bémol c'est que le MouseLeave et le MouseEnter concerne en fait la zone cliente d'où le (Me.RectangleToScreen(Me.ClientRectangle)) et si tu as une grosse bordure ça peut être génant.

    Cdt.

  15. #15
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Salut Olsi,

    A la premiere lecture de ton code, ca a l'air d'etre ce que je cherche.
    Je vais faire les tests et pas de probleme pour la grosseur de la bordure qui est juste Fixed3D.
    Je vous tiens au courant.

    ++ Danyel.

  16. #16
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Bon, les resultats sont tres satisfaisants et ca corresponds parfaitement à ce que je cherche, pour donner la possibilite à l'utilisateur de fixer la fenetre.
    Toujours aussi efficace le olsi
    Encore un grand merci à toi.

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

Discussions similaires

  1. position souris
    Par kakikaki dans le forum MFC
    Réponses: 3
    Dernier message: 30/12/2005, 15h18
  2. Détecter position souris
    Par Glosialabolas dans le forum Linux
    Réponses: 3
    Dernier message: 17/11/2005, 09h42
  3. Réponses: 2
    Dernier message: 11/09/2005, 06h25
  4. [MFC] position souris. systeme de coordonnées
    Par Gloubi99 dans le forum MFC
    Réponses: 2
    Dernier message: 20/07/2005, 12h57
  5. fenetre qui fuit la souris
    Par Nurs dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/11/2004, 00h58

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