h4ck5r2001
Messages postés22Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 6 septembre 2010
-
14 juin 2009 à 04:03
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
14 juin 2009 à 20:11
salut,
mon problème est que je voudrai utiliser mon timer pour envoyer des commandes contenue dans une listbox jusqua 4 fois maximum une a la suite de lautre, ou bien une fois s'il y a seulement 1 element dans la liste, l'utiliser seulement si frmOptions.chklb.Value = vbChecked et utiliser un interval de 10000ms.
tandis que Si chklb. value = false seulement envoyer une command a la fois au server avec un delay de 3000ms
voila mon code mais cela ne marche pas... une commande a la fois est envoyer..
Private Sub TimerQueue_Timer()
Dim mShow As String
Dim strText As String
Dim B As Integer
Dim A As Integer
Dim P As Packet
Set P = New Packet
If frmOptions.chklb.Value = vbChecked Then
TimerQueue.Interval = 10000
For A = 0 To Me.List1.ListCount - 1
If B = 4 Then GoTo lol
If List1.List(A) <> "" Then
If Me.List1.List(A) "" Then Me.List1.List(A) " "
If InStr(List1.List(A), Chr(&H1)) Then
strText = Mid(Me.List1.List(A), 1, InStr(List1.List(A), Chr(1)) - 1)
End If
If strText "" Then strText List1.List(A)
P.InsertString strText 'insert la commande dans le buffer
P.send Form1.WS, SID_CHATCOMMAND 'send la commande
List1.RemoveItem (A)
B = B + 1
Else ' IF CHKLB = VBUNCHECKED!!
TimerQueue.Interval = 3000
If List1.List(0) <> "" Then
If Me.List1.List(0) "" Then Me.List1.List(0) " "
If InStr(List1.List(0), Chr(&H1)) Then
strText = Mid(Me.List1.List(0), 1, InStr(List1.List(0), Chr(1)) - 1)
End If
If strText "" Then strText List1.List(0)
P.InsertString strText 'insert la commande dans le buffer
P.send Form1.WS, SID_CHATCOMMAND 'send la commande
List1.RemoveItem (0)
Exit Sub
End If
End If
lol:
B = 0
Exit Sub
Next A
End If
End Sub
jattend vos réponse =) au pire je peut utiliser un autre timer qui pourrai etre moins compliqué ... mais jai le meme probleme avec for et next...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 14 juin 2009 à 20:11
Re
Tu n'as pas suivi mes indications correctement :
- Pourquoi avoir supprimé ta boucle For A ?
Bien que le A ne serve pas (puisque tu utilises toujours 0), la boucle sert à avancer dans la liste
- La boucle d'attente que je t'ai proposée ne doit pas inclure ton programme à l'intérieur, c'est juste un boucle d'attente : Le Loop doit se trouver juste après le DoEvents et attends que TopTempo se déclenche avant d'exécuter le programme
Une fois que tu es sorti du Do-Loop, tu as eu le TopTempo, donc maintenant, tu peux le remettre à False tout de suite avant d'exécuter ton programme, sinon, TopTempo restera à True et la prochaine boucle d'attente n'aura pas lieu.
- Oublie ton histoire de B et de Goto (qu'il aurait fallu remplacer par un Exit For si tu avais voulu sortir d'un For-Next; Goto est à éviter)
- Dans le TimerQueue_Timer, il faut TOUT enlever, juste garder le TopTempo = True
Essaye de relire posément mes propositions, elles sont claires.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 14 juin 2009 à 05:18
Salut
La Sub que tu nous présente se trouve sur quelle forme ?
Le problème, c'est que tu lis
frmOptions.chklb.Value
Or, si cette frmOptions n'est pas actuellement chargée, VB va la charger, mais que vaut ta CheckBox dans ce cas là ?
Que vaut frmOptions.chklb.Value au moment du test ?
Insère un
MsgBox frmOptions.chklb.Value
pour le savoir
Deuxième chose : Le Next A n'est pas à la bonne place.
Si tu avais indenté (*) proprement ton code, tu l'aurais tout de suite vu.
(*) Après un If, un For, un Do ... les lignes suivantes sont décalées
Après un End If, un Next, un Loop ... les lignes reprennent une position plus à gauche
Le Next doit impérativement être à l'intérieur du If (entre le If et le Else)
Et enfin, dans ton traitement par boucle, tu pars de l'item 0 vers le dernier item.
Par exemple, après avoir traité l'item, tu détruis l'item 0 par un Remove
Dans ce cas, l'item suivant n'est plus l'item 1, mais devient l'item 0.
Avec ton code, cet item 1 devenu 0 ne serait pas traité.
Si tu fais un Remove au fur et à mesure, il faut toujours traité l'item 0, et pas le A
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 14 juin 2009 à 05:26
Ah oui, et ton histoire de Timer :
Le code à l'intérieur de TimerQueue_Timer sera exécuté à chaque déclenchement.
Ta boucle s'exécutera donc complètement, et ton timer ... ne sert à rien
Il faut :
- Ressortir tout ton code du Timer et le mettre dans une Sub "Traitement"
- Dans la partie Déclarations de ta page de code, tu déclares un booléen :
Private bTopTimer As Boolean
- Dans TimerQueue_Timer, tu mets ce booléen à True
- Dans ton traitement, à chaque cycle, juste avant ton Next, il faudra attendre que le booléen passe à True avant de poursuivre
Do While Not bTopTimer
DoEvents ' Attend le Top suivant
Loop
et remettre à zéro le booléen dès que tu le vois à True
bTopTimer = False
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
h4ck5r2001
Messages postés22Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 6 septembre 2010 14 juin 2009 à 17:55
merci jack,
jai essayer en transferent une partie du code dans une sub mais sans resultat concluant... aucune info contenue dans list1 ne s'excecute dans la sub...
voici mon timer qui marche a merveille quand chklb = vbunchecked...
Private Sub TimerQueue_Timer()
Dim mShow As String
Dim strText As String
Dim B As Integer
Dim A As Integer
Dim P As Packet
Set P = New Packet
If frmOptions.chklb.Value = vbchecked Then
bTopTimer = True
loadban 'call la sub...
Else ' IF CHKLB = VBUNCHECKED!!
TimerQueue.Interval = 3000
'If List1.ListCount > 6 Then TimerQueue.Interval = 3000
If List1.List(0) <> "" Then
If Me.List1.List(0) "" Then Me.List1.List(0) " "
If InStr(List1.List(0), Chr(&H1)) Then
' mShow = Mid(List1.List(0), InStr(List1.List(0), Chr(&H1)) + 1, 1)
strText = Mid(Me.List1.List(0), 1, InStr(List1.List(0), Chr(1)) - 1)
End If
If strText "" Then strText List1.List(0)
P.InsertString strText
P.send Form1.WS, SID_CHATCOMMAND
' If mShow = "1" Then
' AddChat vbYellow, "<" & CurrentUser & ">", vbCrLf & vbWhite, strText
' End If
List1.RemoveItem (0)
Exit Sub
End If
End If
Exit Sub
End Sub
et puis ma sub ne marche pas .. je veut seulement quil envoit 4 fois maximum les info contenue dans ma list1.. jutilise b b+1 et if b4 then goto lol .. mais sa na pas laire de marcher. jai vraiment aucune info qui s'éxecute..
Private Sub loadban()
Dim strText As String
Dim B As Integer
Dim A As Integer
Dim P As Packet
Set P = New Packet
TimerQueue.Interval = 10000
'For A = 0 To Me.List1.ListCount - 1
Do While Not bTopTimer
DoEvents
If B = 4 Then GoTo lol
If List1.List(0) <> "" Then
If Me.List1.List(0) "" Then Me.List1.List(0) " "
If InStr(List1.List(0), Chr(&H1)) Then
' mShow = Mid(List1.List(0), InStr(List1.List(0), Chr(&H1)) + 1, 1)
strText = Mid(Me.List1.List(0), 1, InStr(List1.List(0), Chr(1)) - 1)
End If
If strText "" Then strText List1.List(0)
AddChat vbRed, "CHATCMD " & strText
P.InsertString strText
P.send Form1.WS, SID_CHATCOMMAND
' If mShow = "1" Then
' AddChat vbYellow, "<" & CurrentUser & ">", vbCrLf & vbWhite, strText
List1.RemoveItem (0)
B = B + 1
' Next A
End If
Loop
lol:
bTopTimer = False
Exit Sub
End Sub
attend ta reponse jack ! puisque on dirait que tes le seul a réponde o.O'