- 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 :
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