Page 1 sur 1

Problème avec mon chrono

Publié : lun. 05/juin/2006 13:07
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

Publié : lun. 05/juin/2006 20:43
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
;}

Publié : lun. 05/juin/2006 23:38
par Droopy
Voici le chrono avec inclusion d'une police de type LCD : Download

Image

Publié : lun. 25/sept./2006 7:37
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?

Publié : lun. 25/sept./2006 21:50
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.