[Résolu] Faire un intervalle ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Xpetera
Messages : 52
Inscription : sam. 02/févr./2008 22:25

[Résolu] Faire un intervalle ?

Message par Xpetera »

Salut , j'aimerais simuler un interval pour faire une action avec un temps entre :)

Je vous montre mon code :

Code : Tout sélectionner

Enumeration
#liste1
EndEnumeration
OpenWindow(0,150,150,230,100,"w1")
CreateGadgetList(WindowID(0) )
ListIconGadget(#liste1,1,1,220,100,"zq",196)
test = 0
For test=0 To 5
Delay(1000)
AddGadgetItem(#liste1,1,"Test")
Next

Repeat
event = WaitWindowEvent() ; la boucle pour éviter que ca se ferme direct

If event = #PB_Event_Gadget
Select EventGadget()
EndSelect
EndIf
Until event = #WM_CLOSE
Il me semblais avoir vu un exemple je ne sais plus où pour faire ça. :)

Si quelqu'un pourrait me donner un exemple , ca serait vraiment sympa , merci ;)
Dernière modification par Xpetera le ven. 08/févr./2008 7:18, modifié 1 fois.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Je ne comprends pas ce que tu veux exactement, une intervalle de quoi pour faire quoi ?
Xpetera
Messages : 52
Inscription : sam. 02/févr./2008 22:25

Message par Xpetera »

Eh bien pour par exemple ajouter toutes les deux secondes une ligne dans le ListGadgetIcon :)
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Ah je vois! Mais il faut que ton Addmachin soit dans la boucle principale, avec un compteur pour ne pas géner le déroulement normal de la boucle principale, exemple :

Code : Tout sélectionner

Enumeration
#liste1
EndEnumeration
OpenWindow(0,150,150,230,100,"w1")
CreateGadgetList(WindowID(0) )
ListIconGadget(#liste1,1,1,220,100,"zq",196)

TempsDeDepart=ElapsedMilliseconds() ; ton temps de départ

Repeat
event = WindowEvent() ; la boucle ne doit pas fonctionner avec WaitWindowEvent() !

Temps=ElapsedMilliseconds()-TempsDeDepart ; mise à jour du compteur de temps

If Temps>2000                          ; si tu dépasses deux secondes
  TempsDeDepart=ElapsedMilliseconds()  ; tu réinitialise le compteur
  AddGadgetItem(#liste1,1,"Test")      ; et tu rajoutes ton élément
EndIf

If event = #PB_Event_Gadget
Select EventGadget()
EndSelect
EndIf
Until event = #WM_CLOSE
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Une autre méthode qui mange moins le processeur, tu peux modifier le code afin de mettre l'action désirée dans un procédure


Enumeration
     #liste1
EndEnumeration

If OpenWindow (0,150,150,230,100, "w1" )
     If CreateGadgetList ( WindowID (0) )
         ListIconGadget ( #liste1 ,1,1,220,100, "zq" ,196)
        
        S = 2 ; Boucle toutes les 2 secondes
         ; On initialise le timer numéro 1 pour la fenêtre 0
         SetTimer_ ( WindowID (0), 1, 1000*S, 0)
        
         Repeat
             Select WaitWindowEvent ()
                 Case #WM_TIMER
                     ; On ajoute un élément si il y en a moins de 5
                     If CountGadgetItems ( #liste1 ) < 5
                         AddGadgetItem ( #liste1 ,1, "Test" )
                     Else ; L'ajout s'arrête si il y a plus de 5 éléments
                         KillTimer_ ( WindowID (0), 1)
                     EndIf
                 Case #PB_Event_Gadget
                     Select EventGadget ()
                         Case #liste1
                            
                     EndSelect
                 Case #PB_Event_CloseWindow
                    Break
             EndSelect
        ForEver
        
     EndIf
EndIf


EDIT version avec procedure


Enumeration
     #liste1
EndEnumeration

Global Inc ; Variable d'incrémentation

Procedure UpdateEach2S()
     ; On ajoute un élément si il y en a moins de 5
     If Inc < 5
        Inc + 1
         AddGadgetItem ( #liste1 ,1, "Test" )
     Else ; L'ajout s'arrête si il y a plus de 5 éléments
         KillTimer_ ( WindowID (0), 1)
     EndIf
EndProcedure

If OpenWindow (0,150,150,230,100, "w1" )
     If CreateGadgetList ( WindowID (0) )
         ListIconGadget ( #liste1 ,1,1,220,100, "zq" ,196)
        
        S = 2 ; Boucle toutes les 2 secondes
         ; On initialise le timer numéro 1 pour la fenêtre 0
         SetTimer_ ( WindowID (0), 1, 1000*S, @UpdateEach2S())
        
         Repeat
             Select WaitWindowEvent ()
                 Case #PB_Event_Gadget
                     Select EventGadget ()
                         Case #liste1
                            
                     EndSelect
                 Case #PB_Event_CloseWindow
                    Break
             EndSelect
        ForEver
        
     EndIf
EndIf
Xpetera
Messages : 52
Inscription : sam. 02/févr./2008 22:25

Message par Xpetera »

D'accord , merci pour vos deux codes ;)
Répondre