[R] Progressbar et temps

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
baddark
Niveau 2
Niveau 2
Messages : 23
Enregistré le : dim. 12 juil. 2009 10:43
Status : Hors ligne

[R] Progressbar et temps

#1

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] progressbar et temps

#2

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] progressbar et temps

#3

Message 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
 
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
baddark
Niveau 2
Niveau 2
Messages : 23
Enregistré le : dim. 12 juil. 2009 10:43
Status : Hors ligne

Re: [..] progressbar et temps

#4

Message 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^^)
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] progressbar et temps

#5

Message 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
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 :D



Sinon, pour ta question, la transparence peut être mise avec
GUICtrlSetBkColor($label,$GUI_BKCOLOR_TRANSPARENT)
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
ragnoff
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 24 juil. 2009 17:11
Status : Hors ligne

Re: [..] progressbar et temps

#6

Message 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 :D , 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 :o
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] progressbar et temps

#7

Message 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 :D , 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 :o

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)
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
ragnoff
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 24 juil. 2009 17:11
Status : Hors ligne

Re: [..] progressbar et temps

#8

Message par ragnoff »

Merci de cette réponse, la première solution me convient très bien. Le but n'étant pas d'obtenir THE interface graphique irréprochable, mais plutôt d'avoir un truc qui marche bien, et qui soit simple si possible, le leger clignotement du a la lutte acharnée pour la 1er place entre la barre et le texte n est pas un souci. Merci beaucoup . :D :D :D
Répondre