[..] Problème avec fonction qui dure..

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ethneldryt
Status : Hors ligne

[..] Problème avec fonction qui dure..

#1

Message par ethneldryt »

Bonjour, voila dans j'ai un bouton qui fait appelle a une fonction.
Dans cette fonction il y a un inetget..
Une fois que je clique sur le bouton, tout les autres bouton ou menu ne marche plus..
Quand le telechargement est finis mes bouton et menu refonctionne. D'où peux venir le problème?
Merci.
► Afficher le texte
Modifié en dernier par Tlem le jeu. 23 oct. 2008 21:34, modifié 1 fois.
Raison : Ajout des balises de code +édition du titre
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Problème avec fonction qui dure..  

#2

Message par SagePourpre »

Je n'ai pas les #include que tu as utilisé donc je n'ai pas pu tester le script mais à mon avis,
le problème pourrait venir de la boucle @inetgetactive... lorsque le téléchargement est en cours, le script exécuté est exclusivement celui à l'intérieur de cette boucle.

Pour en être certain, tu peux utiliser Opt("TrayIconDebug",1) pour voir où le script coince.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Problème avec fonction qui dure..

#3

Message par SagePourpre »

Comme le script est confiné dans la boucle @inetgetactive pendant le téléchargement, il faudrait qu'il y'ait une fonction dans cette boucle qui vérifie si un bouton est pressé et qui renvoie à ta fonction bouton() dans le cas échéant.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Problème avec fonction qui dure..

#4

Message par sylvanie »

Il faut que l'action déclenché par le bouton lance le téléchargement, mais ne doit pas gérer la progression du download. Pour sortir de suite de la fonction et gérer cette progression, il faut trater cette dernière qui sera lancer via un adlibenable toute les 1 seconde.
Voici un petit bot de code illustrant ceci (j'y ai laissé l'url d'un thème windows de 7Mo pour tester ... ):

Code : Tout sélectionner

Dim $tot,$filesize
Dim $outlocal=@ScriptDir&"\to_trash.bin"

#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 415, 205, 193, 125)
$Button1 = GUICtrlCreateButton("Download", 96, 72, 209, 57, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            download_it("http://www.themeworld.com/cgi-bin/dl/48.pl/QDL78248OZJ/themes/gstrdrmv.zip")
    EndSwitch
WEnd



Func download_it($url) 
    if @InetGetActive Then Return ;<==== Empêche de relancer un download en cours déjà en cours d'éxécurtion
    $filesize = InetGetSize ( $url )
    InetGet($url, $outlocal, 1, 1)
    $percent=0
    $tot = int(($filesize / 1024) / 1024)
    ProgressOn("progression",$percent,"",-1,-1,16)
    Sleep(1000)
    AdlibEnable("update_progressbar",1000)
EndFunc 

Func update_progressbar()
    If @InetGetActive <> 0 Then
        $percent = Int((@InetGetBytesRead / $filesize) * 100)
        $surtot = int((@InetGetBytesRead / 1024) / 1024)
        ProgressSet($percent,"En cours : "&$surtot&" Mo",$percent&" %")
    Else
        ProgressSet(100,"En cours : "&Int($filesize/1024/1024)&" Mo","100 %")
        AdlibDisable()
        ProgressOff()
    EndIf
EndFunc
 


Or le fait que je suis passer par une progressbox, la façon de faire est identique avec un update de contrôle, d'ailleurs à ce sujet, il ne faut surtout pas faire ceci :
$test = GUICtrlCreateLabel($surtot & " Mo de " & $tot & " Mo - " & $percent & "%",11,222)
car tu passes ton temps à recréer des labels s'écrasant les un par dessus les autres ...
il faut créé le label vide, dès la création de la GUI, puis faire des guictrlsetData dans la fonction d'update de progression (lancée par adlibenable)
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre