Utilisation de Sleep

Résolu
Vianneyp Messages postés 82 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2010 - 1 mai 2007 à 12:37
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 1 mai 2007 à 22:53
Bonjours,
Je souhaiterai qu'un label se remplisse progressivement comme dans bon nombre de jeux.
Plutot que d'utiliser une 20aine de Timer je me suis dit qu'il valait mieux utiliser l'instruction Sleep:

Label.Caption = "a"
Sleep X
Label.Caption = "ab"
Sleep X
Label.Caption = "abc"
ect...

Cepandent il semblerai que Sleep "paralyse" totalement le programme.Durant la temporisation,impossible de clique ou que ce soit,d'ecrit ou meme de déplacer la fenêtre...
Le programme reste donc figé jusque a ce que le label soit entiérement remplit par la texte désiré.
L'utilité de ce code se retrouve donc réduite a...néant.

Admettons que l'on écrive Sleep 30000,le programme restera initulisable pendant 30 secs ?
Aucune autre procédure ne peut elle pas étre appelé tant que Sleep "comptabilise" ?
Ou est-ce moi qui fait qqch de travers ?
Merci d'avance pour vos éclairecicements
A voir également:

7 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
1 mai 2007 à 13:20
L'api Sleep suspend le process durant la période déterminer, alors oui le programme est comme figé.

Par contre, je ne vois pas l'interet d'une 20aine de timers, un seul suffit

dans chaque tick du timer il suffit de rajouter une lettre à celles déjà présentes dans la label.

Attention, le timer ne sert pas ici à temporiser entre chaque ajout de lettre comme l'api Sleep, mais il est là pour séquencer l'ajout de la lettre.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
3
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 mai 2007 à 12:44
Salut,

Voici l'api pause :

'Api Pause ici a déclarer dans ta form, si module private >> Public
 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'*********

Utilisation :
Sleep 2000 << ici pause de 2 secondes

A+
Exploreur

 
0
Vianneyp Messages postés 82 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2010
1 mai 2007 à 12:51
C'est exactement ce que j'ai fait.
Si je n'avait pas déclaré l' API Vb ne m'aurai pas laisser compiler le projet.
Non mon probléme est différent car l'instruction Sleep fonctionne trés bien,un peu tro meme puisque si par exemple je met dans une procédure quelquonque :
Sleep 30000
Durant 30 secs le programme ne réagira plus a rien...Mon ordinateur posséde 1024DDR je ne pense donc pas que la memoire en soit la cause...

Je voudrao juste que Windows marque un temps de pause la ou je place Sleep avant de continuer la procédure,non qu'il me "pause" tout le programme  vous voyez ce que je veut dire ?
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 mai 2007 à 12:59
Salut,

Faudrait peut-être placé un Doevents quelque part....

A+
Exploreur

 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
1 mai 2007 à 13:26
Exemple :

Private Const texte As String = "Ajout progressif de texte"

Private Sub Form_Load()

   Label1.Caption = ""
   Timer1.Interval = 250
   Timer1.Enabled = True
   
End Sub<hr />
Private Sub Timer1_Timer()
   Static i As Integer

   i = i + 1
   If i > Len(texte) Then
       i = 1
       Label1.Caption = ""
   End If
   
   Label1.Caption = Label1.Caption & Mid(texte, i, 1)

End Sub<hr />
, ----
[code.aspx?ID=41455 By Renfield]

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0
tiblay Messages postés 60 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 6 janvier 2009
1 mai 2007 à 22:34
Salut VianneYp,

Moi j'utilise ceci

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

                For U = 1 To 80
                    'SYSTEM IDLE
                    DoEvents
                    'DELAY
                    Sleep (100)
                        'Ce que tu veut ICI
                        '--->

                Next U

Bye

TiBlay
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 mai 2007 à 22:53
Private Sub Command1_Click()
 toto = "voilà donc"
 Label1.Caption = ""
 For i = 1 To Len(toto)
   Label1.Caption = Label1.Caption & Mid(toto, i, 1)
   attente 0.3   'règle ici le "pas" que tu veux
 Next
End Sub


Private Sub attente(duree)
  depart = Timer
  While Timer < depart + duree
   DoEvents
  Wend
End Sub
0
Rejoignez-nous