ProgressBar LED multicolores
Publié : lun. 06/avr./2026 10:20
Hello,
Juste pour le fun, voici une version perso de la barre de progression pour une fenêtre d'attente.
Elle est facilement adaptable à vos projets et peut apporter un petit plus en originalité.

Le code source et les 23 icônes sphères, carrés, rectangles (création perso, vous pouvez les utiliser sans restriction) sont disponibles dans un zip ici : LED_Progress.zip
Le code seul:
Joyeuses Pâques!
Juste pour le fun, voici une version perso de la barre de progression pour une fenêtre d'attente.
Elle est facilement adaptable à vos projets et peut apporter un petit plus en originalité.

Le code source et les 23 icônes sphères, carrés, rectangles (création perso, vous pouvez les utiliser sans restriction) sont disponibles dans un zip ici : LED_Progress.zip
Le code seul:
Code : Tout sélectionner
;=========================
; ProgressBar Originale, sphères, carrés et rectangles multicolores
; ProgressBar Original, multicolored spheres, squares and rectangles
; By Jacobus 06/04/2026
;
; Fichier zip contenant / Zip file containing:
; - Fichier source : Progressbar_ImagesLED.pb
; - icônes double format 24x24/16x16
;
; Disponible ici : / Available here:
; https://wolforan.com/wolforansoftware/DevPBimg/LED_Progress.zip
;=========================
;-CONSTANTES
Enumeration
#WinMain
#img1
#img2
#img3
#img4
#img5
#img6
#img7
#img8
#img9
#img10
#img11
#img12
#img13
#img14
#img15
#img16
#img17
#img18
#img19
#img20
#Txt_attente
#Hplink
EndEnumeration
;-VARIABLES
Global PROGRAMNAME$ = "Multi LED Progress"
Global numico = 0, percent = 0
Global LEDICONE, ColorTxt
;-IMAGES
IncludePath "...\LED_Progress\" ; <<< Change the icon directory path / Modifier le chemin du répertoire des icônes
Global Image0 ,Image1,Image2,Image3,Image4,Image5,Image6,Image7,Image8
Image0 = CatchImage(0, ?Image0)
Image1 = CatchImage(1, ?Image1)
Image2 = CatchImage(2, ?Image2)
Image3 = CatchImage(3, ?Image3)
Image4 = CatchImage(4, ?Image4)
Image5 = CatchImage(5, ?Image5)
Image6 = CatchImage(6, ?Image6)
Image7 = CatchImage(7, ?Image7)
Image8 = CatchImage(8, ?Image8)
DataSection ; icônes 24x24 et 16x16
; icônes sphèriques
Image0: : IncludeBinary "Sphere_bleu.ico"
Image1: : IncludeBinary "Sphere_verte.ico"
Image2: : IncludeBinary "Sphere_rouge.ico"
; icônes carrées
Image3: : IncludeBinary "Square_bleu.ico"
Image4: : IncludeBinary "Square_turquoise.ico"
Image5: : IncludeBinary "Square_noir.ico"
; icônes rectangulaires
Image6: : IncludeBinary "Square_bleu_large.ico"
Image7: : IncludeBinary "Square_turquoise_large.ico"
Image8: : IncludeBinary "Square_noir_large.ico"
EndDataSection
Procedure SetColorOfLED(Col = 0)
; Sélection du type d'icône et de la couleur du texte associé.
; Selecting the icon type and associated text color.
If Col = 0 : LEDICONE = Image0 : ColorTxt = RGB(36, 64, 229)
ElseIf Col = 1 : LEDICONE = Image1 : ColorTxt = RGB(36, 229, 35)
ElseIf Col = 2 : LEDICONE = Image2 : ColorTxt = RGB(229, 35, 56)
ElseIf Col = 3 : LEDICONE = Image3 : ColorTxt = RGB(36, 64, 229)
ElseIf Col = 4 : LEDICONE = Image4 : ColorTxt = RGB(33, 223, 229)
ElseIf Col = 5 : LEDICONE = Image5 : ColorTxt = RGB(231, 234, 238)
ElseIf Col = 6 : LEDICONE = Image6 : ColorTxt = RGB(36, 64, 229)
ElseIf Col = 7 : LEDICONE = Image7 : ColorTxt = RGB(33, 223, 229)
ElseIf Col = 8 : LEDICONE = Image8 : ColorTxt = RGB(231, 234, 238)
EndIf
EndProcedure
Procedure ShowProgress(numico)
; Affichage de la progression du remplissage de la barre / Displaying the progress of the bar filling
Select numico
Case 1 : If numico = 1 : state = #False : Else : state = #True : EndIf : HideGadget(#img1, state)
Case 2 : If numico = 2 : state = #False : Else : state = #True : EndIf : HideGadget(#img2, state)
Case 3 : If numico = 3 : state = #False : Else : state = #True : EndIf : HideGadget(#img3, state)
Case 4 : If numico = 4 : state = #False : Else : state = #True : EndIf : HideGadget(#img4, state)
Case 5 : If numico = 5 : state = #False : Else : state = #True : EndIf : HideGadget(#img5, state)
Case 6 : If numico = 6 : state = #False : Else : state = #True : EndIf : HideGadget(#img6, state)
Case 7 : If numico = 7 : state = #False : Else : state = #True : EndIf : HideGadget(#img7, state)
Case 8 : If numico = 8 : state = #False : Else : state = #True : EndIf : HideGadget(#img8, state)
Case 9 : If numico = 9 : state = #False : Else : state = #True : EndIf : HideGadget(#img9, state)
Case 10 : If numico = 10 : state = #False : Else : state = #True : EndIf : HideGadget(#img10, state)
Case 11 : If numico = 11 : state = #False : Else : state = #True : EndIf : HideGadget(#img11, state)
Case 12 : If numico = 12 : state = #False : Else : state = #True : EndIf : HideGadget(#img12, state)
Case 13 : If numico = 13 : state = #False : Else : state = #True : EndIf : HideGadget(#img13, state)
Case 14 : If numico = 14 : state = #False : Else : state = #True : EndIf : HideGadget(#img14, state)
Case 15 : If numico = 15 : state = #False : Else : state = #True : EndIf : HideGadget(#img15, state)
Case 16 : If numico = 16 : state = #False : Else : state = #True : EndIf : HideGadget(#img16, state)
Case 17 : If numico = 17 : state = #False : Else : state = #True : EndIf : HideGadget(#img17, state)
Case 18 : If numico = 18 : state = #False : Else : state = #True : EndIf : HideGadget(#img18, state)
Case 19 : If numico = 19 : state = #False : Else : state = #True : EndIf : HideGadget(#img19, state)
Case 20 : If numico = 20 : state = #False : Else : state = #True : EndIf : HideGadget(#img20, state)
EndSelect
EndProcedure
Procedure HideProgress()
HideGadget(#img1, #True)
HideGadget(#img2, #True)
HideGadget(#img3, #True)
HideGadget(#img4, #True)
HideGadget(#img5, #True)
HideGadget(#img6, #True)
HideGadget(#img7, #True)
HideGadget(#img8, #True)
HideGadget(#img9, #True)
HideGadget(#img10, #True)
HideGadget(#img11, #True)
HideGadget(#img12, #True)
HideGadget(#img13, #True)
HideGadget(#img14, #True)
HideGadget(#img15, #True)
HideGadget(#img16, #True)
HideGadget(#img17, #True)
HideGadget(#img18, #True)
HideGadget(#img19, #True)
HideGadget(#img20, #True)
EndProcedure
Procedure SetProgressBarLED(ValMax)
; procédure pour utilisation en mode progression exacte
; ainsi la valeur max de la progressbar est ValMax
; l'affichage peut s'actualiser en fonction du nombre réel d'éléments
; le texte d'attente devient un affichage de ce qu'il se passe
; Procedure for use in exact progress mode
; thus the maximum value of the progress bar is ValMax
; the display can update according to the actual number of elements
; the waiting text becomes a display of what is happening
ValBlock = ValMax/20 ; divisé par le nombre d'icônes utilisées / divided by the number of icons used
For Block = 0 To ValMax
If Block = ValBlock
numico + 1 : percent + 5 ;: Debug Str(numico) +" "+Str(percent)+ " %"
SetGadgetText(#Txt_attente, " Traitement effectué à : " + Str(percent) + " % - icône n° "+ Str(numico) )
ShowProgress(numico)
ValBlock + ValMax/20
EndIf
Next
numico = 0 : percent = 0 ; remise à zéro pour recommencer ultérieurement / reset to start again later
EndProcedure
;-FENETRE
If OpenWindow(#WinMain, 0, 0, 320, 90, PROGRAMNAME$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Tool)
SetWindowColor(#WinMain, RGB(0,0,0)) ; fond noir / black background
StickyWindow(#WinMain, #True) ; toujours au premier plan pour ne pas la perdre / always in the foreground so as not to lose it
SetColorOfLED(3) ; Changez le type d'icône et la couleur en changeant la valeur (0 par défaut) 1 ou 2 ou plus si vous avez installé d'autres modèles d'icônes
; Change the icon type and color by changing the value (0 by default) to 1 or 2 or more if you have installed other icon templates.
ImageGadget(#img1, 0, 20, 16,16, LEDICONE) : HideGadget(#img1, #True)
ImageGadget(#img2, 16, 20, 16,16, LEDICONE) : HideGadget(#img2, #True)
ImageGadget(#img3, 32, 20, 16,16, LEDICONE) : HideGadget(#img3, #True)
ImageGadget(#img4, 48, 20, 16,16, LEDICONE) : HideGadget(#img4, #True)
ImageGadget(#img5, 64, 20, 16,16, LEDICONE) : HideGadget(#img5, #True)
ImageGadget(#img6, 80, 20, 16,16, LEDICONE) : HideGadget(#img6, #True)
ImageGadget(#img7, 96, 20, 16,16, LEDICONE) : HideGadget(#img7, #True)
ImageGadget(#img8, 112, 20, 16,16, LEDICONE) : HideGadget(#img8, #True)
ImageGadget(#img9, 128, 20, 16,16, LEDICONE) : HideGadget(#img9, #True)
ImageGadget(#img10, 144, 20, 16,16, LEDICONE) : HideGadget(#img10, #True)
ImageGadget(#img11, 160, 20, 16,16, LEDICONE) : HideGadget(#img11, #True)
ImageGadget(#img12, 176, 20, 16,16, LEDICONE) : HideGadget(#img12, #True)
ImageGadget(#img13, 192, 20, 16,16, LEDICONE) : HideGadget(#img13, #True)
ImageGadget(#img14, 208, 20, 16,16, LEDICONE) : HideGadget(#img14, #True)
ImageGadget(#img15, 224, 20, 16,16, LEDICONE) : HideGadget(#img15, #True)
ImageGadget(#img16, 240, 20, 16,16, LEDICONE) : HideGadget(#img16, #True)
ImageGadget(#img17, 256, 20, 16,16, LEDICONE) : HideGadget(#img17, #True)
ImageGadget(#img18, 272, 20, 16,16, LEDICONE) : HideGadget(#img18, #True)
ImageGadget(#img19, 288, 20, 16,16, LEDICONE) : HideGadget(#img19, #True)
ImageGadget(#img20, 304, 20, 16,16, LEDICONE) : HideGadget(#img20, #True)
TextGadget(#Txt_attente, 0, 40, 320, 20, "Thank you for your patience during the destruction process...", #PB_Text_Center)
SetGadgetColor(#Txt_attente, #PB_Gadget_FrontColor, ColorTxt)
SetGadgetColor(#Txt_attente, #PB_Gadget_BackColor, RGB(0,0,0))
HyperLinkGadget(#Hplink, 10, 70, 125, 15, "Test SetProgressBarLED", $EEEAE7, #PB_HyperLink_Underline)
SetGadgetColor(#Hplink, #PB_Gadget_FrontColor, ColorTxt)
SetGadgetColor(#Hplink, #PB_Gadget_BackColor, RGB(0,0,0))
; Le timer qui va animer le tout / The timer that will animate everything
AddWindowTimer(#WinMain, 1, 100) ; pour augmenter la vitesse d'affichage, diminuer les millisecondes et vis dans le versa.
; to increase display speed, decrease milliseconds and vice versa.
;-EVENTLOOP
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Timer And EventTimer() = 1
numico + 1 ; on incrémente de 1 pour sélectionner une sphère après l'autre / We increment by 1 to select one sphere after another
ShowProgress(numico) ; Affichage de la progression icône après icône / Displaying progress icon by icon
If numico = 21 ; si on arrive à 21 c'est la fin de la barre / If we reach 21, that's the end of the bar.
numico = 0 : HideProgress() ; donc on remet à zéro pour relancer et faire une boucle / So we reset to zero to restart and create a loop
EndIf
EndIf
If EventID = #PB_Event_Gadget And EventGadget() = #Hplink
RemoveWindowTimer(#WinMain, 1)
numico = 0 : percent = 0
SetProgressBarLED(10000) ; example with 10000 elements (very fast because there is no processing of the elements other than counting)
EndIf
;-FERMETURE
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
End
EndIf