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
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
Les remarques sont les bienvenues..
Toto1515
