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

C++Builder Discussion :

Evènement OnMouseOut sur un TImage


Sujet :

C++Builder

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut Evènement OnMouseOut sur un TImage
    Bonjour,

    Auriez vous une idée pour implémenter un évènement OnMouseOut sur un contrôle TImage ?
    J'aimerais que le contrôle ait la main au moment où la souris le quitte. Je pourrais intervenir sur le OnMouseMove du parent mais je préfèrerais une solution où le contrôle se gère tout seul.

    J'ai pensé à surdimensionner légèrement l'image en l'entourant d'une bordure transparente de manière à traiter l'évènement OnMouseMove sur cette bordure mais je ne suis pas sûr qu'on active l'évènement si l'on déplace la souris très vite en passant la bordure.

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    En cherchant un peu, j'ai trouvé la fonction SetCaptureControl qui va me permettre, je pense, de solutionner mon problème.

    Parfois, les monologues, ça a du bon !

  3. #3
    Membre éclairé Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Par défaut
    ah ca c'est vrai que les monologues peuvent être très utile parfois !

  4. #4
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par josse95
    Bonjour,

    Auriez vous une idée pour implémenter un évènement OnMouseOut sur un contrôle TImage ?
    J'aimerais que le contrôle ait la main au moment où la souris le quitte. Je pourrais intervenir sur le OnMouseMove du parent mais je préfèrerais une solution où le contrôle se gère tout seul.
    J'aimerais connaitre ta solution car j'ai un problème un peu similaire. En fait dans mon cas c'est lorsque la souris quitte le TImage je souhaite arrêter un Timer.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Voici donc la solution que j'ai implémentée:

    Sur l'évènement OnMouseMove du contrôle, j'ajoute le code suivant:

    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
    void __fastcall TMyCtrl::MyCtrlMouseMove(TObject *Sender,TShiftState Shift,int X,int Y)
    {
        if (X<0 || Y<0 || X>Width || Y>Height)
        {
            MouseCaptured = false;
            SetCaptureControl(CaptCtrl);
            OnMouseOut(Sender,Shift,X,Y); // génère l'évènement OnMouseOut
        }
        else if (!MouseCaptured)
        {
            CaptCtrl = GetCaptureControl();
            SetCaptureControl(Sender);
            MouseCaptured = true;
        }
        ....
    }
    MouseCaptured est un booléen initialisé à false (pour moi, c'est dans le constructeur de TMyCtrl, mais tu n'es pas obligé de créer un nouveau composant comme je l'ai fait), et CaptCtrl est de type TControl.

    L'idée est de garder la capture des évènements souris même quand celle-ci quitte le contrôle. Dès qu'on s'aperçoit qu'elle l'a effectivement quitté, on déclenche l'évènement OnMouseOut et on rend la capture au contrôle qui l'avait initialement.

    En faisant cela, j'ai remarqué que l'évènement OnMouseUp retire la capture. J'ajoute donc également le code suivant sur le OnMouseUp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetCaptureControl(Sender);
    MouseCaptured = true;

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Je teste ça dès que possible et je te dis ce qu'il en est merci de ta réponse

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

Discussions similaires

  1. Ecrire sur un Timage
    Par giloutho dans le forum Delphi
    Réponses: 6
    Dernier message: 01/04/2007, 17h12
  2. Comment écrire en mode "transparent" sur un TImage
    Par Invité dans le forum C++Builder
    Réponses: 3
    Dernier message: 26/08/2005, 11h34
  3. Probleme "onmouseout" sur IE seule
    Par softflowe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/10/2004, 14h04
  4. Info bulle sur un TImage
    Par Dauphin dans le forum C++Builder
    Réponses: 4
    Dernier message: 30/09/2004, 13h56
  5. [Transparent] - Comment dessiner sur 2 TImage ?
    Par TOTO32 dans le forum Langage
    Réponses: 15
    Dernier message: 08/08/2004, 01h06

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