Barre de progression 2D ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ltrautoit
Niveau 4
Niveau 4
Messages : 52
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Barre de progression 2D ?

#1

Message par ltrautoit »

Bonjour,

Pour un traitement avec une boucle imbriquée importante (On va dire de l'ordre de 10 000 lignes*10 000 lignes), je souhaiterais mettre en place un système de visualisation de la progression du traitement.

Pour moi, l'idéal serait une barre de progression 2D. Je n'ai rien trouvé qui me convienne sur le forum français, anglais ou en demandant à Google.

Auriez-vous des idées, pistes, exemples qui pourraient me mettre sur la voie ? Ou des solutions de contournement ?

Merci d'avance.
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: Barre de progression 2D ?  

#2

Message par jl56 »

Bonjour,

Rapidement je verrais 2 barres de progression
1 pour la boucle en cours et l'autre pour les boucles à traiter.

on vois ça dans des outils ce copies ou transfert de fichier
1 barre pour la copie du fichier en cours et l'autre pour l'ensemble des fichiers
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Progress1 = GUICtrlCreateProgress(76, 66, 326, 34)
Global $Progress2 = GUICtrlCreateProgress(76, 120, 326, 34)
Local $idButton = GUICtrlCreateButton("Start", 75, 170, 70, 20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $iWait = 3 ; Attend 20 ms pour le prochain pas de la progression
While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $idButton
         For $i = 1 To 100
            For $j = 1 To 100

               GUICtrlSetData($Progress2, $j)
               Sleep($iWait)

            Next
            Sleep(1000)
            GUICtrlSetData($Progress2, 0)

            GUICtrlSetData($Progress1, $i)
         Next

   EndSwitch
WEnd




Cordialement,

Jean-Luc
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1028
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Barre de progression 2D ?

#3

Message par walkson »

Bonjour,
Je reprends l'idée de jl56 mais l'avancement de la barre, je le mets dans la fonction AdlibRegister("MyAdLibFunc",250), ce qui évite de bloquer le programme dans une boucle

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
Global Const $PBST_NORMAL = 0x0001;vert
Global Const $PBST_ERROR = 0x0002;rouge
Global Const $PBST_PAUSED = 0x0003;jaune
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Progress1 = GUICtrlCreateProgress(76, 66, 326, 34)
Global $Progress2 = GUICtrlCreateProgress(76, 120, 326, 34)
GUICtrlSendMsg(-1, $PBM_SETSTATE, $PBST_PAUSED, 0); couleur jaune
Local $idButton = GUICtrlCreateButton("Start", 75, 170, 70, 20)
Local $adButton = GUICtrlCreateButton("Arret", 75, 200, 70, 20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $i = 0
Global $j = 0
While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
	   Case $idButton
		   $i = 0
		   $j = 0
		   AdlibRegister("MyAdLibFunc",250);peut être AdlibRegister("MyAdLibFunc",500) ou autre
	   Case $adButton
		   AdlibUnRegister("MyAdLibFunc")

   EndSwitch
WEnd

Func MyAdLibFunc()
	If $i > 100 Then $i = 0
	$i += 3 ;à adapter à votre boucle, pour 10 000 lignes ce devrait être 0.01
	$j += 1
	GUICtrlSetData($Progress1, $i)
	GUICtrlSetData($Progress2, $j)
	If $j = 100 Then AdlibUnRegister("MyAdLibFunc")
EndFunc
Dans AdlibRegister("MyAdLibFunc",250), les 250 sont en ms, ce peut être plus rapide ou plus lent
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1028
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Barre de progression 2D ?

#4

Message par walkson »

Et en pseudo barre de progression, j'avais ça il y a longtemps :D

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Color.au3>
Local $aColor[3] = [255, 50, 0]
Local $nColor = _ColorSetRGB($aColor)

#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 360, 131, 192, 124)
Global $Button1 = GUICtrlCreateButton("Button1", 40, 8, 81, 25)
Global $Input2 = GUICtrlCreateInput("", 32, 80, 300, 22,-1,BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
Global $Input1 = GUICtrlCreateInput("", 32, 80, 1, 21)
GUICtrlSetBkColor(-1, $nColor)
Global $Label1 = GUICtrlCreateLabel("Faible" & @CRLF & "|", 32, 50, 50, 30)
GUICtrlSetFont(-1, 8, 800)
Global $Label2 = GUICtrlCreateLabel("Moyen" & @CRLF & "|", 168, 50, 50, 30,$SS_CENTER)
GUICtrlSetFont(-1, 8, 800)
Global $Label3 = GUICtrlCreateLabel("Bon" & @CRLF & "|", 282, 50, 50, 30,$SS_RIGHT)
GUICtrlSetFont(-1, 8, 800)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

	 Case $Button1
		 For $i = 5 To 300
		 Sleep(30)
			$aColor[0] = 255 - ($i/2)
			$aColor[2] = 255 - ($i)
			$aColor[1] = 50 + ($i/2)
			If $i > 255 Then $aColor[0] = 0
			If $i > 255 Then $aColor[2] = 0
			;If $i > 150 Then $aColor[1] = 100 + ($i/2)
			$nColor = _ColorSetRGB($aColor)
		 GUICtrlSetPos($Input1, 32, 80, $i, 21)
		 GUICtrlSetBkColor($Input1, $nColor)
		Next
 EndSwitch
WEnd
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
ltrautoit
Niveau 4
Niveau 4
Messages : 52
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Re: Barre de progression 2D ?

#5

Message par ltrautoit »

Merci à vous tous. Je n'avais pas tilté que les barres de progression pouvaient avoir un Id. Je vais étudier ca (J'avais trouvé un contournement à base de TrayTip et de progreesbar). Passage en résolu.
Répondre