[R] Adapter une barre de progression à mon code

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
GMH
Niveau 6
Niveau 6
Messages : 227
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

[R] Adapter une barre de progression à mon code

#1

Message par GMH »

Bonjour,

J'aime bien la barre de progression présentée par Tlem à l'adresse http://www.autoitscript.fr/forum/viewtopic.php?t=26 , message #9

Je souhaite l'afficher au début de mon programme durant tout le temps où celui-ci lit des fichiers textes, met les contenus dans des tableaux et affiche les valeurs de ces tableaux dans des ListView. Cela afin de faire patienter l'utilisateur.

J'ai codé de manière à ce que :
- une fenêtre d'accueil s'ouvre, contrôles cachés,
- la barre de progression s'affiche pendant la lecture des fichiers et l'installation des contenus dans les listview cachées.
Une fois ces tâches terminées, je voudrais bien sûr, que la barre de progression disparaisse et les contrôles s'affichent.

Ma fenêtre d'accueil vide de tous contrôles ainsi que la barre de progression s'affichent bien. Mais cette dernière n'en finit pas d'en finir !

Pourriez-vous me dire comment rendre la main à mon code une fois la barre de progression lancée ?

Je vous remercie de votre aide.
Modifié en dernier par GMH le sam. 13 févr. 2016 14:36, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Adapter une barre de progression à mon code

#2

Message par mikell »

Ce n'est pas possible avec le script de Tlem en l'état, les fonctions utilisées sont bloquantes (boucles For/Next...)
Pour que du code puisse s'exécuter en même temps que la "barre de progression" fonctionne, et pour pouvoir poser une condition d'arrêt, il faut le remanier
Exemple (sommaire) :

Code : Tout sélectionner

#include <GUIConstants.au3>
HotKeySet("{ESC}", "endscript")

$gui = GUICreate("test", 100, 100, -1, 200)
$label = GUICtrlCreateLabel( "", 10, 10, 20, 20)
GuiSetState(@SW_SHOW)

$Ca = GUICreate ( "" , 250 , 46 , -1 , 350 , $WS_POPUP,$WS_EX_TOPMOST+$WS_EX_WINDOWEDGE+$WS_EX_DLGMODALFRAME)
GUISetBkColor ( 0x000000 , $Ca )
$Da = GUICtrlCreateLabel ("    Installation en cours ...",  23, -1, 250,23)
GuiCtrlCreateGraphic(-1, 1, 252,45,$SS_SUNKEN)
GUICtrlSetColor(-1, 0XFFFFFF)
GUICtrlSetColor ( $Da, 0XFFFFFF)
GUICtrlSetFont ($Da, "12" , "50" , "" , "Courrier New")
GUICtrlCreateGraphic(1, 23, 250,20)
GUICtrlSetColor(-1, 0x007F00)
GuiSetState(@SW_SHOW)

AdlibRegister("_Slider", 50)
For $i = 1 to 100
   GuiCtrlSetData($label, $i)
   Sleep(100)
 ;  _getmsg()
    If GuiCtrlRead($label) = 80 Then 
       AdlibUnRegister("_Slider")
       Msgbox(0,"", "on est à 80, on ferme")
       GuiDelete($Ca)
    EndIf
Next


While 1
  _getmsg()
Wend


Func _getmsg()
        $Msg = GUIGetMsg()
    If $Msg = $GUI_EVENT_CLOSE Then Exit
EndFunc

Func _Slider()
   Static $newcolor, $backcolor, $m = -5, $s
   Local $color = 0x050000
   If $m = -5 Then $s = 1
   If $m = 250 Then $s = -1
   $m = $m + $s*5
   If $s = 1 Then
        $newcolor += $color
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $newcolor)
   Else
        $backcolor += $color  
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $backcolor)
   EndIf
EndFunc

Func endscript()
    Exit
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
GMH
Niveau 6
Niveau 6
Messages : 227
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

Re: [..] Adapter une barre de progression à mon code

#3

Message par GMH »

Merci Mikell. Votre code est parfait pour s'insérer dans mon programme.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Adapter une barre de progression à mon code

#4

Message par Tlem »

Bonjour.
Pour info, dans le code de mikell, la fonction _Slider() peux être réduite à ceci :

Code : Tout sélectionner

Func _Slider()
   Static $newcolor, $backcolor, $m = -5, $s
   Local $color = 0x050000
   If $m = -5 Then $s = 1
   If $m = 250 Then $s = -1
   $m += $s * 5

	$newcolor += $color
	$ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
	GUICtrlSetBkColor($ba, $newcolor)
EndFunc
En ce qui me concerne, j'avais envisagé un truc dans ce genre :

Code : Tout sélectionner

#include <GUIConstants.au3>
HotKeySet("{ESC}", "EndScript")

; Global Vars For Bargraph
Global $hbgGui = 0, $hbgTxt

AdlibRegister("WaitingBargraph", 50)

While 1
	$Msg = GUIGetMsg()
	If $Msg = $GUI_EVENT_CLOSE Then Exit

	; Exemple code
	For $i = 1 To 100
		Beep(2000 + $i*5, 15)
		If $i = 30 Then GUICtrlSetData($hbgTxt, "  Application des paramètres")
		If $i = 60 Then GUICtrlSetData($hbgTxt, "         Fin de l'installation")
		Sleep(100)
	Next
	AdlibUnRegister("WaitingBargraph")
	GUIDelete($hbgGui)

	MsgBox(64, "Installation ...", "Installation terminée.")
	Exit
WEnd


Func WaitingBargraph()
	Local $bgColor = 0x000500 ; 0x000500 = Green  0x050000 = Red
	Static $bgNewcolor, $bgCount, $bgWay = 1

	; Create BarGraph if not exist
	If $hbgGui = 0 Then
		$hbgGui = GUICreate("", 250, 46, -1, -1, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_WINDOWEDGE + $WS_EX_DLGMODALFRAME)
		GUISetBkColor(0x000000, $hbgGui)
		$hbgTxt = GUICtrlCreateLabel("     Installation en cours ...", 23, -1, 250, 23)
		GUICtrlCreateGraphic(-1, 1, 252, 45, $SS_SUNKEN)
		GUICtrlSetColor($hbgTxt, 0XFFFFFF)
		GUICtrlSetColor($hbgTxt, 0XFFFFFF)
		GUICtrlSetFont($hbgTxt, "12", "50", "", "Courrier New")
		GUICtrlCreateGraphic(1, 23, 250, 20)
		GUICtrlSetColor(-1, 0x007F00)
		GUISetState(@SW_SHOW)
	EndIf

	$bgNewcolor += $bgColor
	$ba = GUICtrlCreateLabel("", $bgCount, 25, 4, 16)
	GUICtrlSetBkColor($ba, $bgNewcolor)

	If $bgCount > 245  Then $bgWay = -1
	If $bgCount < 0    Then $bgWay =  1
	$bgCount = $bgCount + $bgWay * 5

EndFunc   ;==>WaitingBargraph

Func EndScript()
	Exit
EndFunc   ;==>endscript
C'est grossier, mais cela permettait de réutiliser le bargraphe au cour du code en fonction des besoins. Ceci-dit tout comme l'autre code, ce bargraph est tributaire de fonction(s) bloquante(s).
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
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Adapter une barre de progression à mon code

#5

Message par mikell »

En fait on peut simplifier la fonction :roll:

Code : Tout sélectionner

Func _Slider()
   Static $newcolor, $m = -5, $s
   Local $color = 0x050000
   If $m = -5 Then $s = 1
   If $m = 250 Then $s = -1
   $m += $s*5
   $newcolor += $color
   $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
   GUICtrlSetBkColor($ba, $newcolor)
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre