[Ex] Barre de progression en dégradé

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
toto1515
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 08 déc. 2010 17:18
Localisation : Corse
Status : Hors ligne

[Ex] Barre de progression en dégradé

#1

Message par toto1515 »

Bonjour,
voici un exemple de barre de progression en dégradé.
J'ai mis pas mal de temps pour trouver comment faire aussi je mets un exemple de ce que j'ai créé.
#cs ----------------------------------------------------------------------------
   AutoIt Version: 3.3.14.2
   Author:         Toto1515
   Script Function: exemple de barre de progression avec des dégradés
#ce ----------------------------------------------------------------------------
OnAutoItExitRegister("quitter")

#Region les includes
   #include <GdiPlus.au3>
#EndRegion les includes

#Region les options
   Opt("GUIOnEventMode", 1)
   Opt("mustdeclarevars", 1)
#EndRegion les options

#Region les constantes
   Global Const $GUI_EVENT_CLOSE = -3
   Global Const $WS_EX_STATICEDGE = 0x00020000
   Global Const $color_0 = 0xFFFFFF
   Global Const $prog_left2 = 10 ; position gauche de la barre de progression
   Global Const $prog_top2 = 15 ; hauteur de la barre de progression
   Global Const $prog_height2 = 10 ; Position verticale de la barre de progression
   Global Const $nb_blancs = 51
#EndRegion les constantes

#Region variables
   Global $maxprogress = 500
   Global $my_colors, $nbbar
   Global $tableau[1]
   Global $nbtot = 0
   Global $Form1, $btn_start, $btn_quitter, $Status_Label
   Global $coef
   Global $max_progress = 0
   Global $progress[1][5]
   Global $lacoulnum, $lacoul
   Global $hGraphic_G
#EndRegion variables

#Region programme principal
   #Region création de la forme
      $Form1 = GUICreate(StringFormat("%" & $nb_blancs & "s", " ") & _
            "Barres de progression en dégradé" & _
            StringFormat("%" & $nb_blancs & "s", " "), 526, 94, -1, 100, 0)
      GUISetOnEvent($GUI_EVENT_CLOSE, "quitter")
      $btn_start = GUICtrlCreateButton("Démarrer", 100, 40, 70, 20)
      GUICtrlSetOnEvent($btn_start, "OKButton")
      $btn_quitter = GUICtrlCreateButton("Quitter", 200, 40, 70, 20)
      GUICtrlSetOnEvent($btn_quitter, "quitter")
      GUICtrlSetState($btn_quitter, 32)
      $Status_Label = GUICtrlCreateLabel("", 400, 42, 100, 20)
   #EndRegion création de la forme

   ; on établi la liste des couleurs
   $my_colors = listecoul(10, 240)

   ; on défini alatoirement le nombre de barres
   $nbbar = Random(5, 20, 1)

   ; on redimensionne les tableaux
   ReDim $tableau[$nbbar + 1]
   ReDim $progress[$nbbar + 1][5]

   For $i = 1 To $nbbar
      $tableau[$i] = Random(50, 230, 1) ; largeur initiele de la barre
   Next

   ;on calcule la somme des largeurs des barres
   For $i = 1 To $nbbar;UBound($tableau) - 1
      $nbtot += $tableau[$i]
   Next

   ;on calcule le coefficient pour ramener la taille totele à $maxprogress=500
   $coef = $nbtot / $maxprogress

   For $i = 1 To $nbbar
      ;on applique le coef à la largeur de chaque barre et on arrondi
      $progress[$i][1] = Round($tableau[$i] / $coef)
      ; on recalcule la somme des largeurs des barres
      $max_progress += $progress[$i][1]
      ; on élabore le numéro de la couleur en fonction du nombre de barre
      $lacoulnum = Int(1 + ($i - 1) * ($my_colors[0][0] - 1) / ($nbbar - 1))
      ; on défini la couleur de la barre
      $lacoul = "0x" & Hex($my_colors[$lacoulnum][1], 2) & Hex($my_colors[$lacoulnum][2], 2) & Hex($my_colors[$lacoulnum][3], 2)
      $progress[$i][2] = $lacoul
      ; on calcule la position gauche de la barre
      $progress[$i][3] = $progress[$i - 1][1] + $progress[$i - 1][3]
   Next
   $progress[0][0] = $max_progress

   ; création du cadre de la barre de progression
   GUICtrlCreateLabel("", $prog_left2 - 1, $prog_top2 - 1, $max_progress + 2, $prog_height2 + 2, -1, $WS_EX_STATICEDGE)

   ;on crée les graphiques pour les barres
   _GDIPlus_Startup()
   $hGraphic_G = _GDIPlus_GraphicsCreateFromHWND($Form1)
   For $i = 1 To $nbbar
      _CreateGradient($color_0, $progress[$i][2], 0, 0, $progress[$i][1], $prog_height2, $i)
   Next

   ;on affihce la forme
   GUISetState(@SW_SHOW, $Form1)

   ;on dessine les barres
   For $i = 1 To $nbbar
      _GDIPlus_GraphicsDrawImageRectRect($hGraphic_G, $progress[$i][0], 0, 0, $progress[$i][1], $prog_height2, $progress[$i][3] + $prog_left2, $prog_top2, $progress[$i][1], $prog_height2)
   Next

   ; on boucle
   While 1
      Sleep(100)
   WEnd
#EndRegion programme principal

#Region les fonctions
   Func _CreateGradient($nStartColor, $nEndColor, $nX, $nY, $nWidth, $nHeight, $num)
      Local $i_deb = 1
      Local $i_fin = $prog_height2
      ;on décompose les couleurs
      Local $color1R = BitAND(BitShift($nStartColor, 16), 0xFF);_ColorGetRed($nStartColor)
      Local $color1G = BitAND(BitShift($nStartColor, 8), 0xFF);_ColorGetGreen($nStartColor)
      Local $color1B = BitAND($nStartColor, 0xFF);_ColorGetBlue($nStartColor)
      Local $color2R = BitAND(BitShift($nEndColor, 16), 0xFF);_ColorGetRed($nStartColor)
      Local $color2G = BitAND(BitShift($nEndColor, 8), 0xFF);_ColorGetGreen($nStartColor)
      Local $color2B = BitAND($nEndColor, 0xFF);_ColorGetBlue($nStartColor)

      ; on calcule le pas
      Local $nStepR = ($color2R - $color1R) / ($nHeight - $nY)
      Local $nStepG = ($color2G - $color1G) / ($nHeight - $nY)
      Local $nStepB = ($color2B - $color1B) / ($nHeight - $nY)

      ; on défini le dessin
      $progress[$num][0] = _GDIPlus_BitmapCreateFromGraphics($progress[$num][1], $prog_height2, $hGraphic_G)
      Local $hGraphic_1 = _GDIPlus_ImageGetGraphicsContext($progress[$num][0])
      Local $hPen1 = _GDIPlus_PenCreate(0, 1)

      ; on crée le dégradé de haut en bas
      For $i = $i_deb To $i_fin
         Local $PenColor = "0xFF" & StringFormat("%02X%02X%02X", $color1R + $nStepR * $i, $color1G + $nStepG * $i, $color1B + $nStepB * $i)
         _GDIPlus_PenSetColor($hPen1, $PenColor)
         _GDIPlus_GraphicsDrawLine($hGraphic_1, 0, $i - $i_deb, $progress[$num][1], $i - $i_deb, $hPen1)
      Next

      ; on libère les éléments
      _GDIPlus_PenDispose($hPen1)
      _GDIPlus_GraphicsDispose($hGraphic_1)

      ; on défini le dessin
      $progress[$num][4] = _GDIPlus_BitmapCreateFromGraphics($progress[$num][1], $prog_height2, $hGraphic_G)
      $hGraphic_1 = _GDIPlus_ImageGetGraphicsContext($progress[$num][4])
      $hPen1 = _GDIPlus_PenCreate(0, 1)

      ; on crée le dégradé de bas en haut
      For $i = $i_deb To $i_fin
         $PenColor = "0xFF" & StringFormat("%02X%02X%02X", $color1R + $nStepR * $i, $color1G + $nStepG * $i, $color1B + $nStepB * $i)
         _GDIPlus_PenSetColor($hPen1, $PenColor)
         _GDIPlus_GraphicsDrawLine($hGraphic_1, 0, $i_fin - $i, $progress[$num][1], $i_fin - $i, $hPen1)
      Next

      ; on libère les éléments
      _GDIPlus_PenDispose($hPen1)
      _GDIPlus_GraphicsDispose($hGraphic_1)
   EndFunc   ;==>_CreateGradient

   Func listecoul($valbas, $valhaut)
      Local $les_couleurs[1531][4]
      Local $t = 0
      For $i = $valbas To $valhaut
         $t += 1
         $les_couleurs[$t][0] = $t
         $les_couleurs[$t][1] = $valhaut
         $les_couleurs[$t][2] = $i
         $les_couleurs[$t][3] = $valbas
      Next
      For $i = $valhaut - 1 To $valbas Step -1
         $t += 1
         $les_couleurs[$t][0] = $t
         $les_couleurs[$t][1] = $i
         $les_couleurs[$t][2] = $valhaut
         $les_couleurs[$t][3] = $valbas
      Next
      For $i = $valbas + 1 To $valhaut
         $t += 1
         $les_couleurs[$t][0] = $t
         $les_couleurs[$t][1] = $valbas
         $les_couleurs[$t][2] = $valhaut
         $les_couleurs[$t][3] = $i
      Next
      For $i = $valhaut - 1 To $valbas Step -1
         $t += 1
         $les_couleurs[$t][0] = $t
         $les_couleurs[$t][1] = $valbas
         $les_couleurs[$t][2] = $i
         $les_couleurs[$t][3] = $valhaut
      Next
      For $i = $valbas + 1 To $valhaut
         $t += 1
         $les_couleurs[$t][0] = $t
         $les_couleurs[$t][1] = $i
         $les_couleurs[$t][2] = $valbas
         $les_couleurs[$t][3] = $valhaut
      Next
      For $i = $valhaut - 1 To $valbas + 1 Step -1
         $t += 1
         $les_couleurs[$t][0] = $t
         $les_couleurs[$t][1] = $valhaut
         $les_couleurs[$t][2] = $valbas
         $les_couleurs[$t][3] = $i
      Next
      $les_couleurs[0][0] = $t
      Return $les_couleurs
   EndFunc   ;==>listecoul

   Func quitter()
      For $i = 1 To UBound($progress) - 1
         _GDIPlus_ImageDispose($progress[$i][0])
      Next
      _GDIPlus_GraphicsDispose($hGraphic_G)
      _GDIPlus_Shutdown()
      Exit
   EndFunc   ;==>quitter

   Func OKButton()
      GUICtrlSetState($btn_quitter, 32)
      GUICtrlSetState($btn_start, 32)
      Local $le_pas = 1
      ; on redessine les barres avec les dégradés initiaux
      For $i = 1 To $nbbar
         _GDIPlus_GraphicsDrawImageRectRect($hGraphic_G, $progress[$i][0], 0, 0, $progress[$i][1], $prog_height2, $progress[$i][3] + $prog_left2, $prog_top2, $progress[$i][1], $prog_height2)
      Next
      Local $percent = 0
      ; on incrémente les barres
      For $t = 1 To $nbbar
         If $t <> 1 Then Sleep(1000)
         ; on dessine progressivement les nouveaux dégradés
         For $i = $le_pas To $progress[0][0] Step $le_pas
            $percent = $percent + $le_pas
            If $i > $progress[$t][1] Then $i = $progress[$t][1]
            GUICtrlSetData($Status_Label, "Avancement : " & Round(100 * $percent / $maxprogress) & "%")
            _GDIPlus_GraphicsDrawImageRectRect($hGraphic_G, $progress[$t][4], 0, 0, $progress[$t][1], $prog_height2, $progress[$t][3] + $prog_left2, $prog_top2, $i, $prog_height2)
            Sleep(10)
            If $i = $progress[$t][1] Then ExitLoop
         Next

      Next
      GUICtrlSetState($btn_quitter, 16)
      GUICtrlSetState($btn_start, 16)
   EndFunc   ;==>OKButton

#EndRegion les fonctions
 
Si ça peut être utile à quelqu'un ...

Les remarques sont les bienvenues..

Toto1515 :D
Autoit 3.3.14.5 - Scite 4.1.0 - Windows 8
Westcb28
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mer. 01 juil. 2015 11:06
Status : Hors ligne

Re: [Ex] Barre de progression en dégradé

#2

Message par Westcb28 »

Script bien sympa que je vais essayer de réutiliser pour une copie de fichier un peu longue au démarrage de mon programme.
Répondre