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 :

Les images clignotes lors du Mouse over [Non suivi]


Sujet :

C++Builder

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Les images clignotes lors du Mouse over
    Bonjour à tous et à toutes,

    Dans mon application (un lecteur de musique), j'y ai mis des boutons en TImage et j'utilise l'événement onClick pour simuler un bouton.
    J'ai fait des boutons sous cette forme pour pouvoir les faire changer d'apparences à l'événement onMouseOver.

    A chaque Image1->onMouseOver je fais changer l'image en lui faisant charger une autre image qui se trouve sur le dique-dur.
    Et à chaque Form1->OnMouseOver je fais revenir l'image du début en lui faisant charger une image qui se trouve sur le dique-dur.

    Le problème, c'est que lorsque j'utilise se système, Quand je passe la souris à répétition sur l'image, et le fond de mon application, l'image à certain moments, dispairait une fraction de seconde et reviens normale.
    C'est très embêtant.

    Merci d'avance,
    Baptiste



    p-s: Désolé si le sujet existe déjà, mais je n'ai pas le courage de tout regarder.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Je n'ai pas OnMouseOver dans ma version BCB.
    Si cet événement fonctionne comme OnMouseMove dans ce cas il faut employer un flag pour
    déterminer si l'image doit être modifiée. Le Tag de l'image peut servir de flag :

    depuis l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(Image1->Tag == 0)
    {
    Image1->Tag = 1;
    Image1->Picture->LoadFromFile(...); 
    //ou si les images sont chargées dans des bitmaps au lancement du programme
    //Image1->Canvas->Draw(0,0, Bitmap_1_Image1); 
    }
    depuis la form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(Image1->Tag == 1)
    {
    Image1->Tag = 0;
    Image1->Picture->LoadFromFile(...);
    //ou si les images sont chargées dans des bitmaps au lancement du programme
    //Image1->Canvas->Draw(0,0, Bitmap_0_Image1);
    }
    A plus !

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Merci
    Merci, mais c'est a peu près mon code actuel (voir en dessous). C'est pourquoi je ne comprend pas que à certain onMouseMove les images se rechargent, enfin je pense, et sa créer un clignotement rapide une fraction de seconde...

    Sachant que j'ai défini les variables au préalable,

    Voici le code que j'utilise :

    -Evénement : OnMouseMove du composant Image1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     
    // Image1Var : Valeur 0 = image du debut, lorsque la souris n'est pas dessus.
    // Image1Var : Valeur 1 = image lorsque la souris est dessus.
     
    if(Image1Var==0)
    {
    Image1Var = 1;
    Image1->Picture->LoadFromFile(Images/mouseMove.bmp);
    }
    -Evénement : OnMouseMove de l'image de fond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     
    // Image2Var : Valeur 0 = image du debut, lorsque la souris n'est pas dessus.
    // Image2Var : Valeur 1 = image lorsque la souris est dessus.
     
    if(Image1Var==1)
    {
    Image1Var = 0;
    Image1->Picture->LoadFromFile(Images/normal.bmp);
    }

    J'utilise ce code pour de nombreuses images.

    (Peut-être que si je mets les images en mémoire ou les incluts tous dans le programme, il n'y aurra pas ce rechargement, enfin, ce clignotement ?)

    Merci, d'avance.
    Baptiste

  4. #4
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 030
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 030
    Points : 8 202
    Points
    8 202
    Par défaut
    Tu peux aussi utiliser tout simplement le double buffering pour toute la fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->DoubleBuffered = true;
    Tu peux aussi mettre tes images danss les ressources sa t'évitera de les charger depuis le disque.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  5. #5
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Pour ma part, en n'utilisant que le Tag de la forme, je n'obtiens aucun clignotement.

    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
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    Tag=0;
    Image1->Picture->LoadFromFile("toto1.bmp");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    if(Tag==0)
       {
       Image1->Picture->LoadFromFile("toto2.bmp");
       Tag=1;
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    if(Tag==1)
       {
       Image1->Picture->LoadFromFile("toto1.bmp");
       Tag=0;
       }
    }
    À bientôt
    Gilles

Discussions similaires

  1. Mouse over avec défilement d'images
    Par Tristan33000 dans le forum jQuery
    Réponses: 3
    Dernier message: 17/04/2014, 12h32
  2. [Toutes versions] fonction mouse over et mouse out pour les boutons de vos userforms
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/04/2011, 13h40
  3. "Bloquer les images provenant resize.over.blog
    Par fil-Oméne dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 09/02/2009, 23h24
  4. Mouse Over/ Out & clignotement
    Par Spir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/10/2008, 14h36
  5. [Traitement d'image] Galerie photo en mouse over
    Par heteroclite dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 19/03/2008, 17h31

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