Page 1 sur 1

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

Posté : jeu. 23 oct. 2008 10:12
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

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

Posté : ven. 24 oct. 2008 11:41
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.

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

Posté : ven. 24 oct. 2008 13:26
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.

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

Posté : ven. 24 oct. 2008 23:14
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)