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

GTK+ avec C & C++ Discussion :

Changer une image lorsque la souris passe dessus.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Points : 48
    Points
    48
    Par défaut Changer une image lorsque la souris passe dessus.
    Bonjour,

    Mon programme a un GtkButton qui contient une GtkImage. Lorsque la souris passe sur l'image, j'aimerais que l'image change. Si quelqu'un a une idée de comment faire ?

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    J'ai trouvé avec gtk_container_remove() et g_object_ref() pour réutiliser le widget. g_object_ref() doit être appelée avant gtk_container_remove() sinon le widget est détruit, à moins qu'il ne soit référencé autre part.

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Serait-il possible de voir le code de construction de ton bouton ?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Voilà:
    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
      l->button = gtk_button_new();
      GTK_WIDGET_UNSET_FLAGS (l->button, GTK_CAN_DEFAULT);
      GTK_WIDGET_UNSET_FLAGS (l->button, GTK_CAN_FOCUS);
      gtk_box_pack_start(GTK_BOX(l->hboxlabel),l->button,FALSE,FALSE,0);
      gtk_button_set_relief (GTK_BUTTON (l->button), GTK_RELIEF_NONE);
      gtk_widget_show(l->button);
      l->sig_handler_tab_close = g_signal_connect ((gpointer) l->button, "clicked",
                                         G_CALLBACK (on_button_editor_tab_close_clicked),
                                         NULL);
      l->sig_handler_tab_close_enter = g_signal_connect ((gpointer) l->button, "enter-notify-event",
                                         G_CALLBACK (on_button_editor_tab_close_enter),
                                         NULL);
      l->sig_handler_tab_close_leave = g_signal_connect ((gpointer) l->button, "leave-notify-event",
                                         G_CALLBACK (on_button_editor_tab_close_leave),
                                         NULL);
      l->sig_handler_tab_close_pressed = g_signal_connect ((gpointer) l->button, "button-press-event",
                                         G_CALLBACK (on_button_editor_tab_close_pressed),
                                         NULL);
      l->sig_handler_tab_close_released = g_signal_connect ((gpointer) l->button, "button-release-event",
                                         G_CALLBACK (on_button_editor_tab_close_released),
                                         NULL);
      l->sig_handler_tab_close_expose = g_signal_connect ((gpointer) l->button, "expose-event",
                                         G_CALLBACK (on_button_editor_tab_close_expose),
                                         NULL);
     
      l->image_normal = gtk_image_new_from_file("close.png");
      l->image_enter = gtk_image_new_from_file("close_hover.png");
      l->image_pressed = gtk_image_new_from_file("close_clicked.png");
      gtk_container_add(GTK_CONTAINER(l->button),l->image_normal);
      gtk_widget_show(l->image_normal);
      gtk_widget_show(l->image_enter);
      gtk_widget_show(l->image_pressed);
    Et les fonctions de traitement des signaux:
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    int pressed = 0;
    int leaved_once = 0;
     
    void
    on_button_editor_tab_close_clicked     (GtkButton       *button,
                                            gpointer         user_data)
    {
      LISTE_OPEN_FILES * l = liste_editor_open_files;
      while(l != NULL) {
        if(GTK_BUTTON(l->button) == button) break;
        l = l->suiv;
      }
      editor_close(l);
    }
     
    gboolean
    on_button_editor_tab_close_enter     (GtkButton       *button,
                                            gpointer         user_data)
    {
      LISTE_OPEN_FILES * l = liste_editor_open_files;
      while(l != NULL) {
        if(GTK_BUTTON(l->button) == button) break;
        l = l->suiv;
      }
      if(pressed == 0) {
        g_object_ref(l->image_normal);
        gtk_container_remove(GTK_CONTAINER(l->button),l->image_normal);
        gtk_container_add(GTK_CONTAINER(l->button),l->image_enter);
      } else {
        g_object_ref(l->image_normal);
        gtk_container_remove(GTK_CONTAINER(l->button),l->image_normal);
        gtk_container_add(GTK_CONTAINER(l->button),l->image_pressed);
      }
      return FALSE;
    }
     
    gboolean
    on_button_editor_tab_close_leave     (GtkButton       *button,
                                            gpointer         user_data)
    {
      LISTE_OPEN_FILES * l = liste_editor_open_files;
      while(l != NULL) {
        if(GTK_BUTTON(l->button) == button) break;
        l = l->suiv;
      }
      if(pressed == 0) {
        if(leaved_once == 1) leaved_once = 0;
        else {
          g_object_ref(l->image_enter);
          gtk_container_remove(GTK_CONTAINER(l->button),l->image_enter);
          gtk_container_add(GTK_CONTAINER(l->button),l->image_normal);
        }
      } else {
        g_object_ref(l->image_pressed);
        gtk_container_remove(GTK_CONTAINER(l->button),l->image_pressed);
        gtk_container_add(GTK_CONTAINER(l->button),l->image_normal);
        leaved_once = 1;
      }
      return FALSE;
    }
     
    gboolean
    on_button_editor_tab_close_pressed     (GtkButton       *button,
                                            gpointer         user_data)
    {
      LISTE_OPEN_FILES * l = liste_editor_open_files;
      while(l != NULL) {
        if(GTK_BUTTON(l->button) == button) break;
        l = l->suiv;
      }
      if(pressed == 0) {
        g_object_ref(l->image_enter);
        gtk_container_remove(GTK_CONTAINER(l->button),l->image_enter);
        gtk_container_add(GTK_CONTAINER(l->button),l->image_pressed);
      }
      pressed = 1;
      return FALSE;
    }
     
    gboolean
    on_button_editor_tab_close_released     (GtkButton       *button,
                                            gpointer         user_data)
    {
     
      pressed = 0;
     
      return FALSE;
    }
     
    gboolean
    on_button_editor_tab_close_expose     (GtkButton       *button,
                                            gpointer         user_data)
    {
      // Supprime le cadre bleu autour du bouton lorsque la souris est sur le bouton:
      gtk_widget_set_state((GtkWidget*)button,GTK_STATE_NORMAL);
      return FALSE;
    }

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Les fonctions gtk_button_set_image(); et gtk_button_get_image(); ne feraient-elles pas l'affaire ?

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Si, ça fonctionne aussi, merci.

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

Discussions similaires

  1. Surbrillane d'une forme lorsque la souris passe dessus
    Par Floflo19 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/06/2014, 14h22
  2. Réponses: 4
    Dernier message: 18/10/2008, 05h54
  3. Afficher une image lorsque la souris passe sur un lien
    Par 1tox dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 04/02/2008, 09h09
  4. Afficher une image lorsque la souris passe sur un lien
    Par cyrillique dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 18/09/2006, 19h38
  5. Surligner une image quand la souris passe au dessus
    Par boss_gama dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/09/2006, 17h39

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