Problème avec mon chrono

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
TidiusFF
Messages : 4
Inscription : ven. 28/avr./2006 22:21

Problème avec mon chrono

Message par TidiusFF »

Bonjour,

Voila, j'ai programmé un chrono via des timers. Mais il y a un problème : les 10è de secondes et les secondes ne sont pas syncro, et impossible de fermer avec la croix

Mon code :

Code : Tout sélectionner

Enumeration
#Window_0
#Button_0
#Button_1
#Chrono
#Text_0
EndEnumeration

If OpenWindow(#Window_0, 283, 104, 168, 206,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Jim'chrono")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_0, 30, 130, 110, 30, "Commencer")
      ButtonGadget(#Button_1, 30, 170, 110, 30, "Arrêter")
      StringGadget(#Chrono, 60, 20, 90, 30, "")
      TextGadget(#Text_0, 10, 20, 40, 20, "Temps : ")
      
    EndIf
  EndIf
  



cs = 0
ds = 0
s = 0
m = 0
dixs = 0
dixm = 0
mode = 0
  
  Repeat
Event = WaitWindowEvent()
  If Event=#WM_TIMER
   
    Select EventwParam()
     
      Case 1 ;/ Timer #1
      ms = ms + 1
      If ms = 10
      ms = 0
      EndIf
      Case 2 ;/ Timer #2
      cs = cs + 1
      If cs = 10
      cs = 0
      EndIf
      Case 3 ;/ Timer #2
      ds = ds + 1
      If ds = 10
      ds = 0
      EndIf
      Case 4 ;/ Timer #2
      s = s + 1
      If s = 10
      s = 0
      EndIf
      Case 5 ;/ Timer #2
      m = m + 1
      If m = 10
      m = 0
      EndIf
      Case 6
      dixs = dixs + 1
      If dixs = 7
      dixs = 0
      EndIf
      Case 7
      dixm = dixm + 1
      
      EndSelect
      
      If mode = 0
      cs = 0
ds = 0
s = 0
m = 0
dixs = 0
dixm = 0
EndIf

ElseIf Event=#PB_Event_Gadget  
If EventGadgetID() = #Button_0
mode = 1
SetTimer_(WindowID(),2,10,0)    ; 10 ms
SetTimer_(WindowID(),3,100,0)   ; 100 ms
SetTimer_(WindowID(),4,1000,0)  ; 1 s
SetTimer_(WindowID(),5,60000,0) ; 1 m
SetTimer_(WindowID(),6,10000,0) ; 1 m
SetTimer_(WindowID(),7,600000,0) ; 1 m
ElseIf EventGadgetID() = #Button_1
KillTimer_(WindowID(),2)  
KillTimer_(WindowID(),3) 
KillTimer_(WindowID(),4) 
KillTimer_(WindowID(),5)  
KillTimer_(WindowID(),6) 
KillTimer_(WindowID(),7)
  EndIf
  EndIf
  
 
  cs$ = Str(cs) 
  ds$ = Str(ds) 
  s$ = Str(s)
  dixs$ = Str(dixs) 
  m$ = Str(m)
  dixm$ = Str(dixm)
  
  chrono$ = dixm$ + m$ + ":" + dixs$ + s$ + ":" +  ds$ + cs$
  SetGadgetText(#Chrono, chrono$)
  
  If WaitWindowEvent() = #PB_Event_CloseWindow
  End
  EndIf

  
  ForEver
Merci d'avance si vous trouvez le prob
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Regarde si ce Chronomètre te conviens

Code : Tout sélectionner

;/ Droopy 05/06/06 / PureBasic 4.0

Global Chrono

Enumeration 
  #Frame  
  #Start_Pause
  #Reset_Intermediaire
  #Chrono 
  #Status
EndEnumeration 

Procedure AffichageChrono()
  
  Repeat
    If T<>Chrono ;/ N'affiche le Chrono que si le contenu a changé
      ms=(Chrono%1000)/10
      Temp.s=Str(ms)
      If ms<10
        Temp.s="0"+Temp
      EndIf
      
      SetGadgetText(#Chrono,FormatDate("%ii:%ss",Chrono/1000)+":"+Temp)
      T=Chrono
      
    EndIf
     
    Delay(10)
    
  ForEver
EndProcedure

Procedure Chronometre()
  Repeat
    Delay(10)
    Chrono+10
  ForEver
EndProcedure

;{/ Génération du Visuel
OpenWindow(0, 0, 0, 180, 150,"Droopy",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
LoadFont(0,"Arial",26)
CreateGadgetList(WindowID(0)) 
Frame3DGadget(#Frame,10,10,160,60,"Chronomètre")
TextGadget(#Chrono, 20, 25 , 140, 40, "00:00:00",#PB_Text_Center) 
SetGadgetFont(#Chrono,FontID(0))
ButtonGadget(#Start_Pause, 10, 75, 160, 20, "Start / Pause") 
ButtonGadget(#Reset_Intermediaire, 10, 100, 160, 20, "Reset / Tps intermédiaire") 
CreateStatusBar(#Status,WindowID(0))
StatusBarText(#Status,0,"  Chronomètre Arrêté")
;}

IdChrono=CreateThread(@Chronometre(),0)
PauseThread(IdChrono)
IdAffichage=CreateThread(@AffichageChrono(),0)

;{/ Gestion des évènements
Repeat
  Event=WaitWindowEvent()
  If Event=#PB_Event_Gadget
    If EventType()=#PB_EventType_LeftClick
      
      Select EventGadget()
        
        
        Case #Start_Pause 
          
          ;/ Si le chrono n'est pas en marche
          If Start=0
            Start=1
            ResumeThread(IdChrono) ;/ On le démarre
            StatusBarText(#Status,0,"  Chronomètre Démarré")
          Else
            ;/ Si on presse Start pendant l'affichage d'un temps intermédiaire on relance l'affichage
            If TpsIntermediaire=1
              ResumeThread(IdAffichage) 
              TpsIntermediaire=0
            Else
              ;/ Sinon on met le chrono en pause
              Start=0
              PauseThread(IdChrono)
              StatusBarText(#Status,0,"  Chronomètre en Pause")
            EndIf
          EndIf
          
        Case #Reset_Intermediaire
          ;/ Si le chrono est arrêté on met le chrono à zéro
          If Start=0
            Chrono=0
            StatusBarText(#Status,0,"  Remise à zéro du Chronomètre")
          Else
            ;/ Le Chrono est démarré --> On bloque l'affichage 
            If TpsIntermediaire=0
              PauseThread(IdAffichage)
              TpsIntermediaire=1
            EndIf
             
            ;/ Puis on affiche un résultat intermédiaire
            ms=(Chrono%1000)/10
            Temp.s=Str(ms)
            If ms<10
              Temp.s="0"+Temp
            EndIf
            SetGadgetText(#Chrono,FormatDate("%ii:%ss",Chrono/1000)+":"+Temp)
            StatusBarText(#Status,0,"  Affichage d'un temps intermédiaire")
            
          EndIf
       EndSelect
    EndIf
  EndIf
Until Event=#PB_Event_CloseWindow
;}
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Voici le chrono avec inclusion d'une police de type LCD : Download

Image
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Message par david »

Le programme est génial. J'aurais voulu insérer une image en arrière plan dans toute la fenêtre (avec le chrono qui s'écrit dessus sans tout cacher) et des boutons un peu transparent pour ne pas masquer non plus totalement l'image.

j"ai utilisé:

Code : Tout sélectionner

UseJPEGImageDecoder ()  ;***DECODEUR JPEG
LoadImage (0 , "Tempo_C.JPG" ) ;image arriere plan
puis inséré dans la fenetre de 'generation du visuel':

Code : Tout sélectionner

 
ImageGadget ( #DerChrono ,  0, 0 , 0, 0, ImageID(0))....
Mais certains boutons ne fonctionnent plus et de toute facon l'image est masquée...

Qu'est-ce qu'il faudrait faire?
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

david a écrit :Mais certains boutons ne fonctionnent plus et de toute facon l'image est masquée...
Teste en désactivant l'ImageGadget.
Pour la transparence des gadgets, je sais pas.
Répondre