[Tuto] Créer une ProgressBar avec pourcentage

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Répondre
Avatar du membre
20100
Niveau 3
Niveau 3
Messages : 42
Enregistré le : ven. 03 juil. 2009 10:39
Status : Hors ligne

[Tuto] Créer une ProgressBar avec pourcentage

#1

Message par 20100 » ven. 03 juil. 2009 17:51

Bonjour,
  • Je vais vous expliquer pas à pas comment mettre en place une progressbar dans vos long traitement, afin d'assurer à l'utilisateur que le traitement avance. On ajoutera aussi à la progressbar le pourcentage d'avancement du traitement.

    Une image est certainement plus parlante, voila le résultat obtenu :
    Image
    Pour se faire on va voir étape par étape le code associé à la mise en place de ce type de progressbar dans vos long traitement.
    • 1) Fenêtre principale de l'application
    • 2) Initialisation des éléments du GUI
    • 3) Évolution de la progressbar au cours d'un traitement
    • 4) Téléchargement/Affichage source complet

1) Fenêtre principale de l'application

Code : Tout sélectionner

;===========================================================================================================
; Description :  Graphical User Interfaces (GUI) principal de l'application
; Syntaxe     :  _GUI_Main()
; Parametere  :  Aucun
; Return      :  Aucun
;===========================================================================================================
Func _GUI_Main()
    
    ; Création de la Fenetre principale en fond blanc
    Global $main_GUI = GUICreate("Test ProgressBar", 640, 280, -1, -1) 
    GUISetBkColor(0xFFFFFF) 

    ; Initialise les élements utilisés (boutton, label, image ...), par defaut sur le boutton est en statut visible.
    _GUI_progressbar("INIT") 

    GUISetState() 
    Local $msg 
    While 1
        $msg = GUIGetMsg()
        Select
            ; Evenement de fermeture de la fenetre
            Case $msg = $GUI_EVENT_CLOSE 
                ExitLoop
            
            ; Evenement de click sur le bouton "Lancer Traitement"
            Case $msg = $button_traitement
                _simulation_traitement()
            
        EndSelect
    WEnd
    GUIDelete()

    Exit
EndFunc
  • En premier lieu dans cette fonction on initialise les éléments du GUI que l'on va utiliser avec la fonction _GUI_progressbar("INIT").
  • En second temps dans la boucle while on "écoute" les événements comme d'habitude, notamment sur le bouton : Case $msg = $button_traitement. Un click sur ce bouton lancera la fonction _simulation_traitement() qui fera office de simulation d'un long traitement. Pour notre exemple, il s'agit simplement du parcours d'une boucle avec une pause à chaque itération.

2) Initialisation des éléments du GUI

Code : Tout sélectionner

;===========================================================================================================
; Description :  Graphical User Interfaces (GUI) associé à la progressbar
; Syntaxe     :  _GUI_progressbar($action)
; Parametere  :  $action (String)
;                  - INIT = Initialise les éléments GUI associé à la progressbar
;                  - HIDE = Cache les éléments GUI associé à la progressbar
;                  - SHOW = Affiche les éléments GUI associé à la progressbar
; Return      :  Aucun
;===========================================================================================================
Func _GUI_progressbar($action)
    Switch $action
        Case "INIT" 
            Global $button_traitement = GUICtrlCreateButton("Lancer Traitement", 215, 30, 210, 30)          
            Global $img_trait = GuiCtrlCreatePic("trait.jpg", 0, 90, 640,1)
            Global $label_progressbar_traitement = GUICtrlCreateLabel("", 105, 120, 150, 20)
            Global $label_pourcentage_traitement = GUICtrlCreateLabel("(100%)", 482, 120)
            Global $progressbar_traitement       = GUICtrlCreateProgress(100, 138, 420, 20)
            GUICtrlSetFont($label_progressbar_traitement, 8.5, 400, 4) ; Change font & souligne label
            GUICtrlSetFont($label_pourcentage_traitement, 8.5, 400, 0) ; Change font & souligne label
            _GUI_progressbar("HIDE") ; Cache tout les elements sauf $button_traitement
            
        Case "HIDE"
            GUICtrlSetState($img_trait, $GUI_HIDE)
            GUICtrlSetState($label_progressbar_traitement, $GUI_HIDE)
            GUICtrlSetState($label_pourcentage_traitement, $GUI_HIDE)
            GUICtrlSetState($progressbar_traitement, $GUI_HIDE)
            
        Case "SHOW"
            GUICtrlSetState($img_trait, $GUI_SHOW)
            GUICtrlSetState($label_progressbar_traitement, $GUI_SHOW)
            GUICtrlSetState($label_pourcentage_traitement, $GUI_SHOW)
            GUICtrlSetState($progressbar_traitement, $GUI_SHOW)

    EndSwitch
EndFunc
  • Les paramètres de cette fonction sont assez clair pour ne pas avoir besoin de les expliquer.
  • Juste un point particulier lors de l'initialisation des éléments par appel de la fonction _GUI_progressbar("INIT"), je refait un appel de cette fonction avec le paramètre _GUI_progressbar("HIDE")pour cacher certains éléments. Cela permet de ne laisser que le bouton "Lancer le traitement" en cachant les autres éléments.

3) Évolution de la progressbar au cours d'un traitement

Code : Tout sélectionner

;===========================================================================================================
; Description :  Simultation d'un traitement long dont on souhaite suivre la progression avec progressbar
;===========================================================================================================
Func _simulation_traitement()
    
    ; Initialisation de la progressbar pour suivre la simulation
    GUICtrlSetState($button_traitement, $GUI_DISABLE) ; Evite de lancer deux fois le traitement par double click
    GUICtrlSetData($label_progressbar_traitement, "Traitement en cours ...")    ; Changement texte label
    _MAJ_progressbar($progressbar_traitement, $label_pourcentage_traitement, 0) ; Mise à zéro de la progressbar
    _GUI_progressbar("SHOW") ; Affichage de la progressbar et label associé
    
    ; Lancement de la Simulation
    Local $nb_tour_boucle = 146
    For $i = 0 to $nb_tour_boucle-1 Step 1
        ; A chaque passage dans la boucle on incremente la progressbar et le pourcentage d'envoi
        $indice_progressbar = Round( ((100 / $nb_tour_boucle) * ($i+1)), 0)
        _MAJ_progressbar($progressbar_traitement, $label_pourcentage_traitement, $indice_progressbar)
        Sleep(20)
    Next
    
    ; Fin de la simulation
    GUICtrlSetData($label_progressbar_traitement, "Traitement terminé.")
    GUICtrlSetData($button_traitement, "Re-Lancer le Traitement")
    GUICtrlSetState($button_traitement, $GUI_ENABLE)
    _MAJ_progressbar($progressbar_traitement, $label_pourcentage_traitement, 100)
EndFunc


;===========================================================================================================
; Description : Mise à jour de la progressbar et de son label associé par la valeur passé en paramètre
; Syntaxe     : _MAJ_progressbar($id_progressbar, $id_label_pourcentage, $valeur)
; Parametere  : $id_progressbar       = Id de la progressbar
;               $id_label_pourcentage = Id du label pourcentage associé à la progressbar
;               $valeur               = Entier à saisir dans la progressbar et le label pourcentage
; Return      : None
;===========================================================================================================
Func _MAJ_progressbar($id_progressbar, $id_label_pourcentage, $valeur)
    GUICtrlSetData($id_progressbar, $valeur)
    GUICtrlSetData($id_label_pourcentage, "("&$valeur&"%)")
EndFunc
;===========================================================================================================
  • La fonction _MAJ_progressbar a un intérêt lorsqu'on utilise différentes progressbar dans la même application afin de faciliter la lecture du code.

4) Téléchargement/Affichage source complet
► Afficher le texteAfficher la source
ProgressBar.zip
Fichier Source du tuto
(14.02 Kio) Téléchargé 719 fois
ProgressBar.zip
Fichier Source du tuto
(14.02 Kio) Téléchargé 719 fois

Avatar du membre
jbnh
Modérateur
Modérateur
Messages : 1932
Enregistré le : ven. 02 mai 2008 13:54
Localisation : Bruxelles
Contact :
Status : Hors ligne

Re: [Tuto] Créer une ProgressBar avec pourcentage

#2

Message par jbnh » ven. 03 juil. 2009 18:03

Bien expliqué, bien structuré... Un grand bravo, en espérant que d'autre suivent ! Image
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11445
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Tuto] Créer une ProgressBar avec pourcentage

#3

Message par Tlem » ven. 03 juil. 2009 18:12

Nickel.

Reste plus qu'à rajouter une gestion non liée à la GUI, pour éviter de bloquer la progressBar lors du déplacement de la GUI.
Voir ici : http://www.autoitscript.fr/forum/viewto ... ?f=6&t=910
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Avatar du membre
20100
Niveau 3
Niveau 3
Messages : 42
Enregistré le : ven. 03 juil. 2009 10:39
Status : Hors ligne

Re: [Tuto] Créer une ProgressBar avec pourcentage

#4

Message par 20100 » ven. 03 juil. 2009 18:19

Arigatô Gozaimasu jbnh ^^
C'est toujours une question de temps mais si j'en ai, promis je ferais d'autre tutos.
Reste plus qu'à rajouter une gestion non liée à la GUI, pour éviter de bloquer la progressBar lors du déplacement de la GUI.
Voir ici : http://www.autoitscript.fr/forum/viewto ... ?f=6&t=910
Qu'entends tu par une gestion non liée à la GUI?
En effet je viens de m'apercevoir que la progressbar se bloque lors du déplacement de fenêtre... Je n'avais jamais tester à déplacer la fenêtre lors d'un traitement. Merci du conseil, je vais essayer de corriger.

Avatar du membre
jbnh
Modérateur
Modérateur
Messages : 1932
Enregistré le : ven. 02 mai 2008 13:54
Localisation : Bruxelles
Contact :
Status : Hors ligne

Re: [Tuto] Créer une ProgressBar avec pourcentage

#5

Message par jbnh » ven. 18 sept. 2009 13:18

Maj pour téléchargement. Modifier $var et $var2
► Afficher le texte
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci

Avatar du membre
20100
Niveau 3
Niveau 3
Messages : 42
Enregistré le : ven. 03 juil. 2009 10:39
Status : Hors ligne

Re: [Tuto] Créer une ProgressBar avec pourcentage

#6

Message par 20100 » jeu. 24 sept. 2009 12:41

Ca me fait penser que je n'ai toujours pas trouvé la "correction" pour le bug de freeze de la progressbar lors du déplacement de la fenêtre.

à Tlem si tu pouvais me donner quelques pistes plus clair c'est pas de refus ^^

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11445
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Tuto] Créer une ProgressBar avec pourcentage

#7

Message par Tlem » sam. 26 sept. 2009 18:42

Le sujet à été traité dans un 'vieux' message et une solution avait été donnée par Greenhorn.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Répondre