Page 1 sur 1

Barre de progression 2D ?

Posté : ven. 23 août 2024 13:33
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.

Re: Barre de progression 2D ?  

Posté : ven. 23 août 2024 14:30
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

Re: Barre de progression 2D ?

Posté : ven. 23 août 2024 23:19
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

Re: Barre de progression 2D ?

Posté : ven. 23 août 2024 23:53
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

Re: Barre de progression 2D ?

Posté : lun. 26 août 2024 14:08
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.