[Ex] Barre de progression en dégradé
Posté : mer. 19 sept. 2018 22:10
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éé.
Si ça peut être utile à quelqu'un ...
Les remarques sont les bienvenues..
Toto1515
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