Page 1 sur 1

[R] Adapter une barre de progression à mon code

Posté : sam. 13 févr. 2016 10:19
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.

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

Posté : sam. 13 févr. 2016 13:05
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

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

Posté : sam. 13 févr. 2016 14:36
par GMH
Merci Mikell. Votre code est parfait pour s'insérer dans mon programme.

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

Posté : sam. 13 févr. 2016 15:35
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).

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

Posté : sam. 13 févr. 2016 15:38
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