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)