Petit compteur graphique
Publié : mar. 17/août/2004 23:45
Je me suis amusé à faire un petit compteur graphique. Bon, c'est pas de la grande précision, mais comme j'en ai pas trop besoin pour le moment, je n'ai pas cherché à faire plus rapide, ni plus optimisé.
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.
Et voilà les images:




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



