Page 1 sur 1
[R] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 11:32
par Yoyo86220
bonjour a tous!
voici mon probleme j'ai 2 boucle "while 1" et "While 2"
je veu que si il ya une erreur a la fin de ma boucle while 2 que sa revienne au début de ma "while 1" merci de votre aide...
ceci ne marche pas...
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 12:03
par Tlem
Cela n'est pas possible en l'état.
Si vous intégrez une boucle While (2) dans une boucle While (1), la boucle 1 ne pourra continuer qui si la boucle 2 est terminée, ou si vous en êtes sorti de la boucle par ExitLoop.
Pour ce que vous voulez faire, il vous faudra passer par des fonctions (Regarder dans le tuto pour ca).
Le mieux serait de créer la fonction 1 avec la boucle 1, puis une fonction 2 avec la boucle 2.
Après il vous suffit de gérer les conditions et les exceptions pour lancer la fonction 1 ou 2, ou en sortir.
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 12:10
par Yoyo86220
ok, je regarde... mais au cas ou on c'est pas compri... ma boucle 2 n'est pas dans ma boucle 1 mais apres mintenant...
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 12:15
par Tlem
Ca ne change rien.
Il n'y à pas de commande Goto comme pour le DOS, donc la solution c'est les Fonctions.
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 12:22
par Yoyo86220
d'accor merci de votre aide... je peux pas fair un truc du genre :
metre ça au début de ma première boucle:
et a la fin de ma deuxième:
ou quelque chose dans ce steal...
si se n'est pas dutout ça, pouvez vous me donner le tuto sur les fonctions...
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 12:52
par Tlem
La commande
Return sert justement aux fonctions.
On place cette commande en sortie de fonction, pour retourner une valeur de contrôle.
Ce qui fait que vous pouvez faire quelque chose comme ceci :
Code : Tout sélectionner
$Res = MaFonction1()
If $Res = 1 Then Msgbox(0,"Retour","La fonction 1 à retourné le code 1")
$Res = MaFonction2()
If $Res = 0 Then Msgbox(0,"Retour","La fonction 2 à retourné le code 0")
Func MaFonction1()
Return 1
EndFunc
Func MaFonction2()
Return 0
EndFunc
On peut aussi simplifié ce genre de code par l'envois d'une valeur qui sera traitée :
Code : Tout sélectionner
$Res = MaFonction(1)
Msgbox(0,"Retour","La fonction à retourné le code " & $Res)
$Res = MaFonction(0)
Msgbox(0,"Retour","La fonction à retourné le code " & $Res)
Func MaFonction($Val)
Return $Val
EndFunc
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 15:33
par Yoyo86220
voici mon sript:
► Afficher le texte
Code : Tout sélectionner
WinWaitActive("Program Manager")
MouseClick("left", 1626, 15, 2)
sleep(400)
Send ( "1" )
While 1
$Res = MaFonction(1) ;<== Ma fonction 1
Msgbox(0,"Retour","La fonction à retourné le code " & $Res)
sleep(200)
Send("{ENTER}")
WinWaitActive("World of Warcraft")
sleep(900)
MouseClick("left", 820, 551, 1)
sleep(200)
Send("yoyo86220")
sleep(300)
MouseClick("left", 844, 649, 1)
sleep(300)
Send("********")
sleep(300)
MouseClick("left", 859, 736, 1)
sleep(100)
MouseClick("left", 806, 958, 1)
sleep(13000)
$color="0xFFFFFF"
$coord=PixelSearch(748, 963, 748, 963,$color)
If not @error Then ExitLoop
WEnd
sleep(5000)
MouseClick("left", 748, 963, 1)
sleep(15000)
Run("D:\aide.bat")
MouseClick("left", 1392, 260, 1)
sleep(2000)
MouseClick("left", 332, 1032, 1)
sleep(6000)
MouseClick("left", 0, 0, 1)
sleep(1000)
MouseClick("left", 1450, 266, 1)
sleep(100)
While 2
$color2="0x101010"
$coord=PixelSearch(1443, 1035, 1443, 1035,$color2)
If @error = 1 Then Return
Func MaFonction(1)
Return 1
EndFunc ;<== retourné a la fonction 1
Wend ;<== Error: "Wend" statement with no matching "while" statement.
EXIT
donc voila il m'indique des erreurs que faire ??....
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 15:37
par Tlem
Yoyo86220 a écrit :donc voila il m'indique des erreurs que faire ??....
Lire l'aide et le tutoriel qui parle de la fonction, et corriger le code pour que ça fonctionne.
Je vous ai expliqué comment faire une fonction ... Mettez en pratique.
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 15:46
par Yoyo86220
lol oki merci (je n'ai que 13ans) je vais chercher quand meme
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 16:00
par Yoyo86220
Snifff durdur je ne comprends pas comment marche une fonction...
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 16:19
par Tlem
Les exemples de mon post
http://www.autoitscript.fr/forum/viewto ... 3943#p3943 ne peuvent être plus simple.
Au lieu de poster à tout vent : Lire l'aide et les posts du forum/Essayer/re-lire l'aide et les posts/Ré-essayer ...
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 17:26
par Yoyo86220
j'explique doucement mais surment...
comment fait-on pour ne pas avoir de Msgbox... je veux garder la fonction mais sans msgbox... merci a tous apres ceci j'aurais fini...
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 17:41
par ani
Faut juste retirer la ligne concerné msgbox(..........)
ou tu peux indiquer le caractère point virgule au début de la ligne comme ci-dessous
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 18:42
par Yoyo86220
Donc j'ai tjr un probleme :
► Afficher le texte
Code : Tout sélectionner
WinWaitActive("Program Manager")
MouseClick("left", 1626, 15, 2)
sleep(400)
Send ( "1" )
$Res = MaFonction1() <==Début de fonction
If $Res = 1 Then ;msgbox(0,"titre","texte")
While 1
sleep(200)
Send("{ENTER}")
WinWaitActive("World of Warcraft")
sleep(900)
MouseClick("left", 820, 551, 1)
sleep(200)
Send("yoyo86220")
sleep(300)
MouseClick("left", 844, 649, 1)
sleep(300)
Send("********")
sleep(300)
MouseClick("left", 859, 736, 1)
sleep(100)
MouseClick("left", 806, 958, 1)
sleep(25000)
$color="0xFFFFFF"
$coord=PixelSearch(748, 963, 748, 963,$color)
If not @error Then ExitLoop
WEnd
sleep(5000)
MouseClick("left", 748, 963, 1)
sleep(15000)
Run("D:\aide.bat")
MouseClick("left", 1392, 260, 1)
sleep(2000)
MouseClick("left", 332, 1032, 1)
sleep(6000)
MouseClick("left", 0, 0, 1)
sleep(1000)
MouseClick("left", 1450, 266, 1)
sleep(100)
While 2
$color2="0x101010"
sleep(10000)
$coord=PixelSearch(1443, 1035, 1443, 1035,$color2)
If @error = 1 Then ExitLoop
If Not @error Then ContinueLoop
Wend
EndIf
Func MaFonction1() <== Fonction
Return 1
EndFunc
EXIT
la fonction ne revient pas au début... aide plz
Re: [..] Revenir a la boucle précédente
Posté : dim. 16 mars 2008 22:56
par Tlem
Vous n'avez visiblement pas compris la philosophie d'une fonction.
Une fonction est un bout de code déclaré fonction qui est appelé n'importe ou dans votre code.
J'avais mis le code
Return 1 pour l'exemple, mais le but dans votre cas est d'intégrer vos boucle
While dans des fonctions différentes.
Sinon, une autre solution consisterait à utiliser les commandes Select/EndSelect dans ce genre :
Code : Tout sélectionner
$Res = 0
While 1 ; Boucle Infinie.
Select ; Selection de la condition.
Case $Res = 0 ; Condition si $Res = 0
MsgBox(0, "", "Res = 0") ; Au lieu de ceci mettez votre première boucle
$Res = 1 ; Ici je met $Res = 1 pour pouvoir aller dans l'autre case.
Case $Res = 1 ; Condition si $Res = 1
MsgBox(0, "", "Res = 1") ; Au lieu de ceci mettez votre deuxième boucle
$Res = 3 ; Ici je met $Res = 3 pour pouvoir sortir.
; Cette condition n'est là que pour traiter les cas autres que ceux traités
; précédement (Au cas ou il y aurais un cas supplémentaire).
Case Else ; Signifie autre cas (Que $Res=0 ou $Res=1)
$Res = 3 ; je met $Res = 3 pour pouvoir sortir.
EndSelect ; Fin de selection de la condition.
If $Res = 3 Then ExitLoop ; Si $Res=3, je sort de la boucle While, sinon on continue.
WEnd ; Fin de la boucle.
Le code si-dessus est suffisement commenté pour votre compréhension, merci de l'adapter à vos besoins.