Page 1 sur 1
[R] Progressbar et temps
Posté : mer. 22 juil. 2009 23:21
par baddark
Bonjour,
Je me casse la tête depuis plus d'une heure, mais je n'arrive pas à trouver la bonne formule, tout d'abord je vous envoie mon code.
Code : Tout sélectionner
Func progressbar($tps)
Local $i = 0
While($tps < $i)
$tps = $tps / 100
$i = $i + $tps
GUICtrlSetData($bartext2, $i)
Wend
EndFunc
Bon au départ je pensais que sa allait marcher mais sans succès, en fait je voudrais que la barre progresse selon le temps choisi, par exemple, si $tps = 20 (secondes), la barre devrait avancer de 5% par seconde afin de finir à 100% au bout des 20 secondes.
Ce qui ferait une pause de 200ms entre chaque pourcentage si je calcule bien, manuellement, je sais le faire, mais vu que je ne connais pas le chiffre à l'avance :/
Merci d'avance
Re: [..] progressbar et temps
Posté : mer. 22 juil. 2009 23:45
par Tlem
Cela devrait ressembler plutôt à ceci :
Code : Tout sélectionner
Func progressbar($tps)
Local $i = 0, $Count
For $i = 1 To $tps
$Count += 100/$tps
GUICtrlSetData($Progress1, $Count)
Sleep(1000) ; Attente de 1 seconde
Next
EndFunc
Par contre, vous ne pouvez rajouter aucun traitement intermédiaire sans fausser la durée ...
Autoit n'est pas réellement multitâche.
Re: [..] progressbar et temps
Posté : jeu. 23 juil. 2009 04:35
par SagePourpre
Personnellement, j'utiliserais un compteur pour faire cela
Code : Tout sélectionner
#include <GUIConstants.au3>
Opt("GuiOnEventMode",1)
$gui = GUICreate("test",200,200)
$pro = GUICtrlCreateProgress(10,10,100,40)
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE,"quitter")
$_timer = TimerInit()
While 1
Sleep(1000) ; ***
$timer = Round(TimerDiff($_timer)/1000,0) * 5
GUICtrlSetData($pro,$timer)
WEnd
Func quitter()
Exit
EndFunc
Dans le cas ci-présent, si tu insère diverses actions dans ta boucle ou si tu changes la durée du sleep, le timer servira de base pour
faire augmenter la progressbar plutôt qu'un sleep. Ce qui peux quand même fausser le 20 secondes légèrement si le 20 secondes vient à
son terme et que ton script est occupé ailleurs, mais dans ce cas, tu pourrais utiliser un adlibenable () pour faire avancer le temps correctement.
Code : Tout sélectionner
#include <GUIConstants.au3>
Opt("GuiOnEventMode",1)
$gui = GUICreate("test",200,200)
$pro = GUICtrlCreateProgress(10,10,100,40)
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE,"quitter")
$_timer = TimerInit()
AdlibEnable("blu",500)
While 1
Sleep(4000)
ToolTip("Poke !",-1,-1)
Sleep(700)
ToolTip("")
WEnd
Func quitter()
Exit
EndFunc
Func blu()
$timer = Round(TimerDiff($_timer)/1000,0) * 5
GUICtrlSetData($pro,$timer)
If $timer >= 100 Then AdlibDisable()
EndFunc
Re: [..] progressbar et temps
Posté : jeu. 23 juil. 2009 13:19
par baddark
super merci, je vais prendre la méthode Tlem, plus facile à modifier^^ et surtout on peut récupérer la valeur de $tps par la fonction
Par contre, comment fait-on pour écrire sur la barre de progression svp ? J'avais trouver la variable mais je ne sais plus ce que j'en ai fais...
(avec la fonction de transparence aussi^^)
Re: [..] progressbar et temps
Posté : jeu. 23 juil. 2009 23:48
par SagePourpre
baddark a écrit :super merci, je vais prendre la méthode Tlem, plus facile à modifier^^ et surtout on peut récupérer la valeur de $tps par la fonction
Par contre, comment fait-on pour écrire sur la barre de progression svp ? J'avais trouver la variable mais je ne sais plus ce que j'en ai fais...
(avec la fonction de transparence aussi^^)
C'est simplement que je ne m'en suis pas donné la peine mais...
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
Opt("GuiOnEventMode",1)
$gui = GUICreate("test",200,200)
$pro = GUICtrlCreateProgress(10,10,100,40)
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE,"quitter")
$_timer = TimerInit()
$tps = 20 ; temps en seconde
$_tps = 100/$tps
While $pro < 100
Sleep(200) ; le sleep peut être enlevé ou modifié sans affecté la progress bar
$timer = Round(TimerDiff($_timer)/1000,2) * $_tps
GUICtrlSetData($pro,$timer)
WEnd
Func quitter()
Exit
EndFunc
Ici $tps est le temps total nécessaire avant que la progressbar arrive à 100% (20 secondes ds ce cas-ci) (Facilement modifiable)
Et $temps est le temps écoulé depuis le début.
La seule différence est finalement que le script peut faire autre chose sans affecter le 20 secondes.
Mais si c'est seulement pour une attente ou rien d'autre ne doit se faire en même temps, la fonction de tlem
convient parfaitement
Sinon, pour ta question, la transparence peut être mise avec
GUICtrlSetBkColor($label,$GUI_BKCOLOR_TRANSPARENT)
Re: [..] progressbar et temps
Posté : ven. 24 juil. 2009 22:31
par ragnoff
Bonjour, j'ai découvert moi aussi AutoIt il y a peu, et les possibilités m'intéressent énormément.
Je rencontre aussi le même type de souci que baddark, mais j'ai plutôt choisi la méthode proposée par sagepourpre.
J'ai réussi a créer une barre, elle avance gentiment

, les commandes qui doivent se dérouler en parallèle ne posent pas plus de souci que ça ... mais je n arrive pas a afficher un texte dans la barre,
Est ce que quelqu'un pourrait développer un petit peu le type de commande à utiliser ? merci d'avance

Re: [..] progressbar et temps
Posté : sam. 25 juil. 2009 02:44
par SagePourpre
ragnoff a écrit :Bonjour, j'ai découvert moi aussi AutoIt il y a peu, et les possibilités m'intéressent énormément.
Je rencontre aussi le même type de souci que baddark, mais j'ai plutôt choisi la méthode proposée par sagepourpre.
J'ai réussi a créer une barre, elle avance gentiment

, les commandes qui doivent se dérouler en parallèle ne posent pas plus de souci que ça ... mais je n arrive pas a afficher un texte dans la barre,
Est ce que quelqu'un pourrait développer un petit peu le type de commande à utiliser ? merci d'avance

Tu peux peut-être utiliser cette méthode
http://www.autoitscript.fr/forum/viewto ... 909&p=5157
mais ce n'est pas l'idéal puisque la progress bar et le label semble se livrer un combat indécent pour
la place du dessus.
Sinon, TLEM a publié ceci :
http://www.autoitscript.fr/forum/viewto ... ?f=6&t=910
Je ne sais pas vraiment à quoi ça ressemble (trop paresseux pour ajouter les fichiers de tlem dans mes includes,
mais c'est surement intéressant (Je ne sais pas par contre s'il y'a des exemples avec les label
par-dessus la progress bar)
Re: [..] progressbar et temps
Posté : sam. 25 juil. 2009 17:29
par ragnoff