[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 : 17
Enregistré le : mer. 08 déc. 2010 17:18
Status : Hors ligne

[Ex] Barre de progression en dégradé

#1

Message par toto1515 » mer. 19 sept. 2018 21: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éé.
#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

Répondre