Page 1 sur 1

[R] Compte a rebour

Posté : jeu. 21 févr. 2008 19:19
par astaroth
Bonjour!

J'aimerai savoir si c'est possible d'integrer un compte a rebour dans une GUI, qui s'active après avoir cliqué sur un Label ? Si oui c'est possible que ce compte a rebour continu meme en ayant fermer le programme (en laissant un fichier texte qui indique l'heure de debut par exemple)?

P'tit bout de code pour exemple:

Code : Tout sélectionner

#include <GUIConstants.au3>

GUICreate("blabla", 400, 280)
GUICtrlCreatePic("C:\Users\Administrateur\Desktop\Images\Capturer.jpg",0,0, 400,280)

$Button_1 = GUICtrlCreateButton ("test",  10, 30, 100)
GUICtrlSetCursor(-1, 0)
$Button_2 = GUICtrlCreateLabel("Compte a rebour", 340, 250, 45, 18)
GUICtrlSetColor(-1, 0xff0000)
GUICtrlSetCursor(-1, 0)

GUISetState ()      

; Run the GUI until the dialog is closed
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $Button_1
            Run('Notepad.exe')    
        Case $msg = $Button_2
            MsgBox(0, 'Testing', 'Button 2 was pressed') 
    EndSelect
Wend
Merci :)

Re: [...] Compte a rebour

Posté : jeu. 21 févr. 2008 20:36
par Tlem
astaroth a écrit :J'aimerai savoir si c'est possible d'integrer un compte a rebour dans une GUI, qui s'active après avoir cliqué sur un Label ?
Oui

astaroth a écrit :Si oui c'est possible que ce compte a rebours continu même en ayant fermer le programme (en laissant un fichier texte qui indique l'heure de début par exemple)?
Non

Pour ce genre de manipulation, il vous faudra passer par un second script, car quand vous fermer le programme, le code s'arrête et donc pas de compte à rebours possible.

Re: [..] Compte a rebour

Posté : jeu. 21 févr. 2008 21:23
par sylvanie
Pour la première partie, indépendement de l'aspect fermeture du programme, il faudra passer par un adlibenable.

Pourquoi ?
parce que la gestion d'un compte à rebours consiste à attendre une seconde, updater un compteur et reboucler jusqu'à 0.
Grossièrement

Code : Tout sélectionner

for $i=30 to 0 step -1
 sleep(1000)
Next
Or le problème ici est que pendant 30 secondes, on va rester prisonnier de cette boucle, et tout tes contrôles seront inutilisables (fermeture, autre bouton ...)

donc pour éviter ceci, il faut écrire une fonction qui ne fait que retrancher 1 à une variable de compteur, updater le label et tester si la variable est tomber à 0 pour arr^ter le compteur. Puis lancer cette fonction (nommons la toto) via adlibenable("toto",1000) lors du click du label
Ceci va déclancher un faux mini thread qui va exécuter toto toutes les 1000 ms, mais qui va surtout rendre tout de suite la main au script pour ne pas bloquer.

A la fin du compte à rebours, il faudra faire un adlibdisable() pour arrêter ce petit thread.

Re: [..] Compte a rebour

Posté : ven. 22 févr. 2008 07:44
par astaroth
Heu..

Un petit exemple? :D

Re: [..] Compte a rebour

Posté : ven. 22 févr. 2008 19:19
par sylvanie
J'ai repris ton code en y mettant la fonctionnalité suivante sur le label :
1 - lance le cpt à rebours si il n'est pas déjà lancé
2 - demande si on veut l'arrêter sinon

comme ça on verra un exple de suspension et reprise
j'ai fait plusieurs petites fonctions pour les "routines", pour améliorer la visibilité, concept du diviser pour mieux reigner.
► Afficher le texte

Re: [..] Compte a rebour

Posté : ven. 22 févr. 2008 23:37
par astaroth
:o

Merci beaucoup Sylvanie !