WaitWindowEvent()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
bugrane
Messages : 24
Inscription : dim. 02/mai/2004 18:28
Localisation : Bruxelles

WaitWindowEvent()

Message par bugrane »

Bonjour à tous,

Je n'arrive pas à comprendre pourquoi mon programme ne fonctionne pas, ou plutôt si j'ai toujours un problème de reset du gadgeteventID()
Comme pureBasic se souvient de la valeur de cet evenement, dans ma boucle principale il fait toujours la même action. Quelqu'un pourrait-il me dire comment après avoir exécuté ma procédure Enregistrer Fichier(voir le code ci-joint) je pourrais reseter la valeur de EventGadgetID() pour que mon programme n'exécute pas sans ma procédure Enregistrer fichier

Merci d'avance

Henri

Code : Tout sélectionner

; ------------------------------------------------------------
;
;   PureBasic - Chrono
;

;   Librairie(s) utilisée(s): PureTools_I
;
;   Dernière Modification: le 12/06/2004
;
; ------------------------------------------------------------

Declare MonChrono()
Declare CalculTempsIntermediaire() 
Declare EnregistrerFichier()

Global CentiemeSecondes.b
Global Secondes.b
Global Minutes.b
Global Heures.b
Global NombreTours.b
Global FlagGadgetEvent.b
Global ElapsedTime.l
Global TempsAffiche$
Global Centiemes.l
Global TempsSecondes.l
Global Secondes.b
Global Longueur.l
Global TempsPrecedent.l
Global TempsIntermediaire.l
Global temp$
Global aSecondes.b
Global LngCentieme.b
Global Vitesse.f
Global Longueur.l
Global Evenement.b

Centiemes=0
Secondes=0
Minutes=0
Heures=0
NombreTours=0
ElapsedTime=0
Vitesse=0
longueur=0
TempsPrecedent=0
TempsIntermediaire=0
FlagGadgetEvent=0
Evenement=0

OpenWindow(1, 100, 200, 500, 380, #PB_Window_SystemMenu, "Chrono")  
CreateGadgetList(WindowID())
   
StringGadget(2,100, 5, 170, 30, "") 

ButtonGadget(3, 70, 80, 60, 30, "Démarrer" ,#PB_Button_Default)
ButtonGadget(4, 170, 80, 60, 30, "Arrêter" ,#PB_Button_Default)
ButtonGadget(5, 270, 80, 60, 30, "Interm." ,#PB_Button_Default)
ButtonGadget(6, 370, 80, 60, 30, "Zéro" ,#PB_Button_Default)
ButtonGadget (15,220,320,80, 30, "Enregistrer",#PB_Button_Default)
TextGadget(7, 20, 13, 75, 20, "HH:MM:SS:CC")
TextGadget(8, 280,13, 350, 20, "Longueur du circuit en mètres: ")
StringGadget(9,430, 10 ,40, 20,"",#PB_String_Numeric)
LoadFont(12,"courrier", 18, #PB_Font_Bold) 
SetGadgetFont(2,UseFont(12) )
SetGadgetText(2, "00:00:00:00") 
SetGadgetText(9,"1000")
ListIconGadget(10, 100, 140, 300, 150, "Tour n°:", 60,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines  )
AddGadgetColumn(10, 2, "Temps intermédiares", 120) 
AddGadgetColumn(10,3,"Vitesse en Km/h",180) 
    Repeat 
       WaitWindowEvent()
       Evenement=EventGadgetID()
       
       
       If Evenement=3
          StartTimer( 0, 10, @MonChrono() ) 
          Delay(10) 
       ElseIf Evenement=4
          EndTimer(0 )
       ElseIf Evenement=6
          SetGadgetText(2, "00:00:00:00")
          CentiemeSecondes=0
          Secondes=0
          Minutes=0
          Heures=0
          ClearGadgetItemList(10)
          NombreTours=0 
       ElseIf Evenement=5 And FlagGadgetEvent=0
          CalculTempsIntermediaire() 
       ElseIf Evenement=15
          EnregistrerFichier() 
       EndIf
    
    Until WaitWindowEvent() = #PB_Event_CloseWindow 
    

Procedure MonChrono()
  ElapsedTime=ElapsedTime+1
  CentiemeSecondes=CentiemeSecondes+1
  If CentiemeSecondes>99 
     CentiemeSecondes=0
     Secondes=Secondes+1   
  EndIf
  
  If CentiemeSecondes<10
     CentiemeSeconde$="0"+Str(CentiemeSecondes)
  Else
     CentiemeSeconde$=Str(CentiemeSecondes)
  EndIf
  
  If Secondes>59 
        Secondes=0
        Minutes=Minutes+1
  EndIf

  
  If Secondes<10
     Seconde$="0"+Str(Secondes)
  Else
     Seconde$=Str(Secondes)
  EndIf
  
  If Minutes >59
     Minutes=0
     Heures=Heures+1
  EndIf
  
  If Minutes<10
     Minute$="0"+Str(Minutes)
  Else 
     Minute$=Str(Minutes)  
  EndIf
  
  
  If Heures>24
     Heures=0
  EndIf
  If Heures<10
     Heure$="0"+Str(Heure$)
  Else
     Heure$=Str(Heures)
  EndIf
    
  Temp$=Heure$+":"+Minute$+":"+Seconde$+":"+CentiemeSeconde$


  SetGadgetText(2, temp$)
   
EndProcedure


Procedure CalculTempsIntermediaire()

   FlagGadgetEvent=1
   NombreTours=NombreTours+1
   Longueur$=GetGadgetText(9)
   Longueur=Val(Longueur$)
   TempsIntermediaire=ElapsedTime-TempsPrecedent
   
   aCentieme$=Str(TempsIntermediaire)
   aCentieme$=Right(aCentieme$,2)
   aSecondes=Int(TempsIntermediaire/100)

   lngHeure = Int(aSecondes / 3600)
   lngMinute = Int((aSecondes - (lngHeure * 3600)) / 60)
   lngSeconde = Int(aSecondes - (lngHeure * 3600) - (lngMinute * 60))
   
   If LngHeure<10
      LngHeure$="0"+Str(LngHeure)
   Else
      LngHeure$=Str(LngHeure)
   EndIf
   
   If LngMinute<10
      LngMinute$="0"+Str(LngMinute)
   Else
      LngMinute$=Str(lngMinute)
   EndIf
   
   If LngSeconde<10
      LngSeconde$="0"+Str(LngSeconde)
   Else
      LngSeconde$=Str(LngSeconde)
   EndIf
   
   TempsInt$=LngHeure$+":"+LngMinute$+":"+LngSeconde$+":"+aCentieme$

   longueur$=GetGadgetText(9)
   longueur=ValF(longueur$)
   Vitesse=longueur*(360/TempsIntermediaire) 
   AddGadgetItem(10, 0,Str(NombreTours)+Chr(10)+TempsInt$+Chr(10)+StrF(Vitesse,2)+Chr(10))
   TempsPrecedent=Elapsedtime
   Delay (10)  ;Pour réduire la réactivité de WaitwindowEvent
   FlagGadgetEvent=0
EndProcedure


Procedure EnregistrerFichier()

   NomFichier$ = SaveFileRequester("Enregistrer", "temps.txt", "Fichiers Textes|*.txt", 1) 
   OpenFile(0, NomFichier$)
   CloseFile(0) 
   Evenement=0   
EndProcedure

hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Rien que le déplacement de la souris sur la fenêtre crée des événements!
Pas besoin de delay, mais procéder (toujours) de la sorte

quit=0
repeat
event=WaitWindowEvent()
select event
case #PB_EventGadget

ton code

case #PB_EventMenu (Si il y a des menus...)

ton code

etc...


case #PB_CloseWindow
quit=1
until quit
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Oubli : utiliser le GadgetEventId() uniquement dans le "case #PB_EventGadget"
bugrane
Messages : 24
Inscription : dim. 02/mai/2004 18:28
Localisation : Bruxelles

Message par bugrane »

Merc, cela marche maintenant
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

bugrane a écrit :Merc, cela marche maintenant

La fermeture de la fenêtre avec la petite croix fonctionne ?????

voici le code modifié, regarde la boucle d'événement modifié, pas besoin de remettre événement à 0 puisque événement change lorsqu'il y a un nouvel événement, sinon c'est une boucle qui attend l'événement.

Pour avoir un code stable, il faut obligatoirement tester si l'ouverture du fichier a été faite avant de le fermer avec closefile, car si l'ouverture échoue, ca va planter.

Code : Tout sélectionner

; ------------------------------------------------------------ 
; 
;   PureBasic - Chrono 
; 

;   Librairie(s) utilisée(s): PureTools_I 
; 
;   Dernière Modification: le 12/06/2004 
; 
; ------------------------------------------------------------ 

Declare MonChrono() 
Declare CalculTempsIntermediaire() 
Declare EnregistrerFichier() 

Global CentiemeSecondes.b 
Global Secondes.b 
Global Minutes.b 
Global Heures.b 
Global NombreTours.b 
Global FlagGadgetEvent.b 
Global ElapsedTime.l 
Global TempsAffiche$ 
Global Centiemes.l 
Global TempsSecondes.l 
Global Secondes.b 
Global Longueur.l 
Global TempsPrecedent.l 
Global TempsIntermediaire.l 
Global temp$ 
Global aSecondes.b 
Global LngCentieme.b 
Global Vitesse.f 
Global Longueur.l 
Global Evenement.b 

Centiemes=0 
Secondes=0 
Minutes=0 
Heures=0 
NombreTours=0 
ElapsedTime=0 
Vitesse=0 
longueur=0 
TempsPrecedent=0 
TempsIntermediaire=0 
FlagGadgetEvent=0 
Evenement=0 

OpenWindow(1, 100, 200, 500, 380, #PB_Window_SystemMenu, "Chrono")  
CreateGadgetList(WindowID()) 
    
StringGadget(2,100, 5, 170, 30, "") 

ButtonGadget(3, 70, 80, 60, 30, "Démarrer" ,#PB_Button_Default) 
ButtonGadget(4, 170, 80, 60, 30, "Arrêter" ,#PB_Button_Default) 
ButtonGadget(5, 270, 80, 60, 30, "Interm." ,#PB_Button_Default) 
ButtonGadget(6, 370, 80, 60, 30, "Zéro" ,#PB_Button_Default) 
ButtonGadget (15,220,320,80, 30, "Enregistrer",#PB_Button_Default) 
TextGadget(7, 20, 13, 75, 20, "HH:MM:SS:CC") 
TextGadget(8, 280,13, 350, 20, "Longueur du circuit en mètres: ") 
StringGadget(9,430, 10 ,40, 20,"",#PB_String_Numeric) 
LoadFont(12,"courrier", 18, #PB_Font_Bold) 
SetGadgetFont(2,UseFont(12) ) 
SetGadgetText(2, "00:00:00:00") 
SetGadgetText(9,"1000") 
ListIconGadget(10, 100, 140, 300, 150, "Tour n°:", 60,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines  ) 
AddGadgetColumn(10, 2, "Temps intermédiares", 120) 
AddGadgetColumn(10,3,"Vitesse en Km/h",180) 

    Repeat 
    
       Select WaitWindowEvent()
          Case #PB_EventGadget  ; l'événement se fait sur un gadget
             Evenement=EventGadgetID() 
             If Evenement=3 
                StartTimer( 0, 10, @MonChrono() ) 
                Delay(10) 
             ElseIf Evenement=4 
                EndTimer(0 ) 
             ElseIf Evenement=6 
                SetGadgetText(2, "00:00:00:00") 
                CentiemeSecondes=0 
                Secondes=0 
                Minutes=0 
                Heures=0 
                ClearGadgetItemList(10) 
                NombreTours=0 
             ElseIf Evenement=5 And FlagGadgetEvent=0 
                CalculTempsIntermediaire() 
             ElseIf Evenement=15 
                EnregistrerFichier()
             EndIf 
       
         Case #PB_EventCloseWindow  ; c'est un événement différent de celui des gadgets
               quit + 1
       EndSelect  
    Until quit
    

Procedure MonChrono() 
  ElapsedTime=ElapsedTime+1 
  CentiemeSecondes=CentiemeSecondes+1 
  If CentiemeSecondes>99 
     CentiemeSecondes=0 
     Secondes=Secondes+1    
  EndIf 
  
  If CentiemeSecondes<10 
     CentiemeSeconde$="0"+Str(CentiemeSecondes) 
  Else 
     CentiemeSeconde$=Str(CentiemeSecondes) 
  EndIf 
  
  If Secondes>59 
        Secondes=0 
        Minutes=Minutes+1 
  EndIf 

  
  If Secondes<10 
     Seconde$="0"+Str(Secondes) 
  Else 
     Seconde$=Str(Secondes) 
  EndIf 
  
  If Minutes >59 
     Minutes=0 
     Heures=Heures+1 
  EndIf 
  
  If Minutes<10 
     Minute$="0"+Str(Minutes) 
  Else 
     Minute$=Str(Minutes)  
  EndIf 
  
  
  If Heures>24 
     Heures=0 
  EndIf 
  If Heures<10 
     Heure$="0"+Str(Heure$) 
  Else 
     Heure$=Str(Heures) 
  EndIf 
    
  Temp$=Heure$+":"+Minute$+":"+Seconde$+":"+CentiemeSeconde$ 


  SetGadgetText(2, temp$) 
    
EndProcedure 


Procedure CalculTempsIntermediaire() 

   FlagGadgetEvent=1 
   NombreTours=NombreTours+1 
   Longueur$=GetGadgetText(9) 
   Longueur=Val(Longueur$) 
   TempsIntermediaire=ElapsedTime-TempsPrecedent 
    
   aCentieme$=Str(TempsIntermediaire) 
   aCentieme$=Right(aCentieme$,2) 
   aSecondes=Int(TempsIntermediaire/100) 

   lngHeure = Int(aSecondes / 3600) 
   lngMinute = Int((aSecondes - (lngHeure * 3600)) / 60) 
   lngSeconde = Int(aSecondes - (lngHeure * 3600) - (lngMinute * 60)) 
    
   If LngHeure<10 
      LngHeure$="0"+Str(LngHeure) 
   Else 
      LngHeure$=Str(LngHeure) 
   EndIf 
    
   If LngMinute<10 
      LngMinute$="0"+Str(LngMinute) 
   Else 
      LngMinute$=Str(lngMinute) 
   EndIf 
    
   If LngSeconde<10 
      LngSeconde$="0"+Str(LngSeconde) 
   Else 
      LngSeconde$=Str(LngSeconde) 
   EndIf 
    
   TempsInt$=LngHeure$+":"+LngMinute$+":"+LngSeconde$+":"+aCentieme$ 

   longueur$=GetGadgetText(9) 
   longueur=ValF(longueur$) 
   Vitesse=longueur*(360/TempsIntermediaire) 
   AddGadgetItem(10, 0,Str(NombreTours)+Chr(10)+TempsInt$+Chr(10)+StrF(Vitesse,2)+Chr(10)) 
   TempsPrecedent=Elapsedtime 
   Delay (10)  ;Pour réduire la réactivité de WaitwindowEvent 
   FlagGadgetEvent=0 
EndProcedure 


Procedure EnregistrerFichier() 
   NomFichier$ = SaveFileRequester("Enregistrer", "temps.txt", "Fichiers Textes|*.txt", 1) 
   If OpenFile(0, NomFichier$) 
      CloseFile(0) 
   EndIf   
EndProcedure 
bugrane
Messages : 24
Inscription : dim. 02/mai/2004 18:28
Localisation : Bruxelles

Message par bugrane »

Merci Denis, plus de problèmes, décidément cela n'est pas facile apprendre àprogrammer.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

bugrane a écrit :Merci Denis, plus de problèmes, décidément cela n'est pas facile apprendre àprogrammer.
Mais si, c'est une question de temps.

Tu assimilera au fur et à mesure comme nous et puis il reste toujours des énigmes...

J'ai vu que tu as écrit que tu utilise PureTools_I . Cette librairie de Danilo est excellente. Les boutons de la Toolbar (dernière version de la lib)répondent à des événement #PB_event_Menu dans la boucle d'événement.
Répondre