Tous les graphismes sont chargés dans une liste pour gagner en précision, mais c'est plutôt au niveau de la procédure qui se charge de trier les images qu'il faudrait peut-être chercher pour gagner quelque chose.
Enfin, vous verrez bien, si vous pouvez en tirer quelque chose.
Code : Tout sélectionner
;/Constantes Window
Enumeration
#Window_0
EndEnumeration
;/Constantes Gadget
Enumeration
#Compteur1
#Compteur2
#Compteur3
#Compteur4
#Btn_Quit
EndEnumeration
Structure COUNTER
Gadget.l ; Identifiant de l'ImageGadget recevant le compteur
IdImage.l ; Identifiant de l'image
Digits.w ; Nombre de chiffres dans le compteur
Width.w ; Largeur de l'image
Height.w ; Hauteur de l'image
DigitWidth.w ; Largeur des chiffres
WidthCounter.w ; Largeur du compteur
HeightCounter.w ; Hauteur du compteur
Digit_0.l ; Id du digit 0
Digit_1.l ; Id du digit 1
Digit_2.l ; Id du digit 2
Digit_3.l ; Id du digit 3
Digit_4.l ; Id du digit 4
Digit_5.l ; Id du digit 5
Digit_6.l ; Id du digit 6
Digit_7.l ; Id du digit 7
Digit_8.l ; Id du digit 8
Digit_9.l ; Id du digit 9
Digit_10.l ; Id du digit 10
EndStructure
NewList Info.COUNTER()
Global Valeur1, Valeur2, Valeur3, Valeur4
Procedure CreeCompteur(Fichier.s, Gadget.l, NbDigit.w)
Flag = 1
ForEach Info()
If Info()\Gadget = Gadget
Flag = 0 : Break
EndIf
Next
If Flag = 1
AddElement(Info())
Info()\Gadget = Gadget
Info()\IdImage = LoadImage(#PB_Any, Fichier)
Info()\Digits = NbDigit
Info()\Width = ImageWidth()
Info()\Height = ImageHeight()
Info()\DigitWidth = ImageWidth()/11
Info()\WidthCounter = Info()\DigitWidth*NbDigit
Info()\HeightCounter = ImageHeight()
Info()\Digit_0 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*0 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_1 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*1 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_2 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*2 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_3 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*3 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_4 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*4 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_5 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*5 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_6 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*6 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_7 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*7 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_8 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*8 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_9 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*9 ,0,Info()\DigitWidth,Info()\HeightCounter)
Info()\Digit_10 = GrabImage(Info()\IdImage, #PB_Any, Info()\DigitWidth*10,0,Info()\DigitWidth,Info()\HeightCounter)
EndIf
EndProcedure
Procedure AfficheCompteur(Compteur.l,Valeur.l)
ForEach Info()
If Info()\Gadget = Compteur
Break
EndIf
Next
Chaine$ = RSet(Str(Valeur),Info()\Digits,"0")
Img = CreateImage(#PB_Any,Info()\WidthCounter,Info()\HeightCounter)
StartDrawing(ImageOutput())
For i = 0 To Info()\Digits-1
Char$ = Mid(Chaine$,i+1,1)
Select Char$
Case "0" : DrawImage(UseImage(Info()\Digit_0), i*Info()\DigitWidth,0)
Case "1" : DrawImage(UseImage(Info()\Digit_1), i*Info()\DigitWidth,0)
Case "2" : DrawImage(UseImage(Info()\Digit_2), i*Info()\DigitWidth,0)
Case "3" : DrawImage(UseImage(Info()\Digit_3), i*Info()\DigitWidth,0)
Case "4" : DrawImage(UseImage(Info()\Digit_4), i*Info()\DigitWidth,0)
Case "5" : DrawImage(UseImage(Info()\Digit_5), i*Info()\DigitWidth,0)
Case "6" : DrawImage(UseImage(Info()\Digit_6), i*Info()\DigitWidth,0)
Case "7" : DrawImage(UseImage(Info()\Digit_7), i*Info()\DigitWidth,0)
Case "8" : DrawImage(UseImage(Info()\Digit_8), i*Info()\DigitWidth,0)
Case "9" : DrawImage(UseImage(Info()\Digit_9), i*Info()\DigitWidth,0)
Case "-" : DrawImage(UseImage(Info()\Digit_10),i*Info()\DigitWidth,0)
EndSelect
Next
StopDrawing()
SetGadgetState(Compteur, UseImage(Img))
FreeImage(Img)
EndProcedure
Procedure Callback(Hnd,Msg,wParam,lParam)
Resultat = #PB_ProcessPureBasicEvents
Select Msg
Case #WM_PAINT
AfficheCompteur(#Compteur1,Valeur1)
AfficheCompteur(#Compteur2,Valeur2)
AfficheCompteur(#Compteur3,Valeur3)
AfficheCompteur(#Compteur4,Valeur4)
EndSelect
ProcedureReturn Resultat
EndProcedure
If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Compteur",0)
SetWindowCallback(@Callback())
If CreateGadgetList(WindowID(#Window_0))
ImageGadget(#Compteur1,10,10,0,0,0,#PB_Image_Border)
ImageGadget(#Compteur2,10,50,0,0,0,#PB_Image_Border)
ImageGadget(#Compteur3,10,90,0,0,0,#PB_Image_Border)
ImageGadget(#Compteur4,10,130,0,0,0,#PB_Image_Border)
ButtonGadget(#Btn_Quit, 100, 170, 100, 25, "Quitter")
EndIf
;On crée d'abord les compteurs, pouis on les affiche par la callback
CreeCompteur("Count1.bmp", #Compteur1, 7)
CreeCompteur("Count2.bmp", #Compteur2, 5)
CreeCompteur("Count3.bmp", #Compteur3, 9)
CreeCompteur("Count4.bmp", #Compteur4, 8)
T1 = SetTimer_(WindowID(#Window_0), 1, 100, 0)
T2 = SetTimer_(WindowID(#Window_0), 2, 2000, 0)
T3 = SetTimer_(WindowID(#Window_0), 3, 350, 0)
T4 = SetTimer_(WindowID(#Window_0), 4, 2500, 0)
Repeat
Select WaitWindowEvent()
Case #WM_TIMER
If EventwParam() = T1 : Valeur1 +1
AfficheCompteur(#Compteur1,Valeur1)
EndIf
If EventwParam() = T2 : Valeur2 +1
AfficheCompteur(#Compteur2,Valeur2)
EndIf
If EventwParam() = T3 : Valeur3 +1
AfficheCompteur(#Compteur3,Valeur3)
EndIf
If EventwParam() = T4 : Valeur4 +1
AfficheCompteur(#Compteur4,Valeur4)
EndIf
Case #PB_EventGadget
Select EventGadgetID()
Case #Btn_Quit : quit = 1
EndSelect
Case #PB_EventCloseWindow : quit = 1
EndSelect
Until quit = 1
End
EndIf



