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 :

Arret de la Progression d'une ProgressBar


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Par défaut Arret de la Progression d'une ProgressBar
    Bonjour,

    J'utilise les cours de http://gtk.developpez.com/cours/gtk2/ pour mon apprentissage de la librairie GTK. Dans ces cours, les auteurs donnent un exemple d'utilisation d'un progressBar qui se charge lors de l'appui sur un Bouton.

    Voici le code source :

    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
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    void OnButton(GtkWidget *pWidget, gpointer data);
     
    int main(int argc,char **argv)
    {
       GtkWidget* pWindow;
       GtkWidget *pMainVBox;
       GtkWidget *pProgress;
       GtkWidget *pButton;
     
       gtk_init(&argc,&argv);
     
       pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title(GTK_WINDOW(pWindow), "GtkProgressBar");
       gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
       gtk_container_set_border_width(GTK_CONTAINER(pWindow), 4);
     
       pMainVBox = gtk_vbox_new(TRUE, 0);
       gtk_container_add(GTK_CONTAINER(pWindow), pMainVBox);
     
       /* Creation de la barre de progression */
       pProgress = gtk_progress_bar_new();
       gtk_box_pack_start(GTK_BOX(pMainVBox), pProgress, TRUE, FALSE, 0);
     
       pButton = gtk_button_new_from_stock(GTK_STOCK_REFRESH);
       gtk_box_pack_start(GTK_BOX(pMainVBox), pButton, TRUE, FALSE, 0);
       g_signal_connect_swapped(G_OBJECT(pButton), "clicked", G_CALLBACK(OnButton), pProgress);
     
       gtk_widget_show_all(pWindow);
     
       g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
       gtk_main();
     
       return EXIT_SUCCESS;
    }
     
    void OnButton(GtkWidget *pWidget, gpointer data)
    {
       gdouble dFraction;
       gint i;
       gint iTotal = 2000;
     
       /* Initialisation */
       gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pWidget), 0.0);
     
       /* Ici on grab sur la barre de progression pour 2 raisons : */
       /* - cela evite a GTK+ de regarder tous les evenements ce qui rend plus rapide */
       /* l'utilisation de gtk_main_iteration() */
       /* - on empeche toute action de l'utilisateur */
       gtk_grab_add(pWidget);
     
       for(i = 0 ; i < iTotal ; ++i)
       {
          dFraction = (gdouble)i / (gdouble)iTotal;
     
          /* Modification de la valeur de la barre de progression */
          gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pWidget), dFraction);
     
          /* On donne la main a GTK+ */
          gtk_main_iteration ();
       }
     
       /* On supprime le grab sur la barre de progression */
       gtk_grab_remove(pWidget);
    }
    J'aimerais savoir si il est possible de créer un second Bouton qui pourrait arrêter la Progression de la ProgressBar.
    J'espère avoir était le plus clair possible

    Merci d'avance

    PS : Est-ce normal qu'il n'y est pas de fonction rechercher sur ce Forum ?

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par défaut Stop de cycle "for"
    Salut,

    essaye le code suivant. J'ai ajoute "state" pour gestion de cycle "for". Normalment on utilise pour long duree action un nouveau thread. Et il faut aussi effacer gtk_grab_add.

    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include <unistd.h>
     
     
    gboolean	state = TRUE;
    void OnButtonRefresh (GtkWidget *pWidget, gpointer data);
     
     
    void OnButtonStop (GtkWidget *pWidget, gpointer data)
    {
    	state = FALSE;
    }
     
     
    int main(int argc,char **argv)
    {
       GtkWidget* pWindow;
       GtkWidget *pMainVBox;
       GtkWidget *pProgress;
       GtkWidget *pButton;
     
       gtk_init(&argc,&argv);
     
       pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title(GTK_WINDOW(pWindow), "GtkProgressBar");
       gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
       gtk_container_set_border_width(GTK_CONTAINER(pWindow), 4);
     
       pMainVBox = gtk_vbox_new(TRUE, 0);
       gtk_container_add(GTK_CONTAINER(pWindow), pMainVBox);
     
       /* Creation de la barre de progression */
       pProgress = gtk_progress_bar_new();
       gtk_box_pack_start(GTK_BOX(pMainVBox), pProgress, TRUE, FALSE, 0);
     
       pButton = gtk_button_new_from_stock(GTK_STOCK_REFRESH);
       gtk_box_pack_start(GTK_BOX(pMainVBox), pButton, TRUE, FALSE, 0);
       g_signal_connect_swapped(G_OBJECT(pButton), "clicked", G_CALLBACK(OnButtonRefresh), pProgress);
     
       pButton = gtk_button_new_from_stock(GTK_STOCK_STOP);
       gtk_box_pack_start(GTK_BOX(pMainVBox), pButton, TRUE, FALSE, 0);
       g_signal_connect_swapped(G_OBJECT(pButton), "clicked", G_CALLBACK(OnButtonStop), pProgress);
     
       gtk_widget_show_all(pWindow);
     
       g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
       gtk_main();
     
       return EXIT_SUCCESS;
    }
     
     
    void OnButtonRefresh ( GtkWidget *pWidget, gpointer data )
    {
       gdouble dFraction;
       gint i;
       gint iTotal = 2000;
     
    	state = TRUE;
       /* Initialisation */
       gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pWidget), 0.0);
     
       /* Ici on grab sur la barre de progression pour 2 raisons : */
       /* - cela evite a GTK+ de regarder tous les evenements ce qui rend plus rapide */
       /* l'utilisation de gtk_main_iteration() */
       /* - on empeche toute action de l'utilisateur */
    //   gtk_grab_add(pWidget);
     
       for(i = 0 ; i < iTotal && state ; ++i)
       {
          dFraction = (gdouble)i / (gdouble)iTotal;
     
          /* Modification de la valeur de la barre de progression */
          gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pWidget), dFraction);
     
     			usleep ( 5000 );
          /* On donne la main a GTK+ */
    			while ( gtk_events_pending() ) gtk_main_iteration();
          //gtk_main_iteration ();
       }
     
       /* On supprime le grab sur la barre de progression */
    //   gtk_grab_remove(pWidget);
    }
    Fredy

    (et pour possibilite de rechercher il faut etre connecte)

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Par défaut
    Bonjour Freedy,

    Merci pour ta réponse, mais le compilateur génère une erreur devant la fonction

    [Linker error] undefined reference to `usleep'
    ld returned 1 exit status
    C:\Documents and Settings\XXX\Bureau\GTK - Progress2\Makefile.win [Build Error] ["GTK] Error 1
    Donc je n'ai pas pu tester ton code.Comme tu le vois je suis sous windows puisque j'entends utiliser GTK pour un projet scolaire.

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Solevis Voir le message
    Merci pour ta réponse, mais le compilateur génère une erreur devant la fonction

    Comment faire une pause dans le programme ?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Par défaut
    Effectivement. Merci pour votre aide ca marche trés bien.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/04/2008, 11h23
  2. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  3. [VB6] Utiliser une Progressbar (barre de progression)
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/03/2006, 14h57
  4. Une ProgressBar pour un rafraichissement d'image
    Par JakeGrafton dans le forum Composants VCL
    Réponses: 8
    Dernier message: 06/01/2004, 22h21
  5. comment programmer une progressbar
    Par Choucas dans le forum Paradox
    Réponses: 3
    Dernier message: 13/11/2002, 11h07

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