Page 1 sur 1

[Résolu] Faire un intervalle ?

Publié : jeu. 07/févr./2008 20:43
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 ;)

Publié : jeu. 07/févr./2008 21:04
par Octavius
Je ne comprends pas ce que tu veux exactement, une intervalle de quoi pour faire quoi ?

Publié : jeu. 07/févr./2008 21:05
par Xpetera
Eh bien pour par exemple ajouter toutes les deux secondes une ligne dans le ListGadgetIcon :)

Publié : jeu. 07/févr./2008 21:35
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

Publié : jeu. 07/févr./2008 21:36
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

Publié : jeu. 07/févr./2008 21:48
par Xpetera
D'accord , merci pour vos deux codes ;)