Autoit Compte a rebours.

A

Anonymous

Invité
#1
Bonjour,

J'ai fais une p'tite GUI me permettant de gerer un peu mieux mon elevage de famillier, seulement j'ai quelques soucis que je n'arrive pas a regler.

Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$heure = 5
$min = 0
$sec = 0
$Fenetre = "Form1"

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 300, 300, 300, 300)
$button = GUICtrlCreateButton("J'ai fini de nourrir mes familliers. Me prevenir dans 5h",25,230,250,50)
$label = GUICtrlCreateLabel("" & $heure & " : "  & $min &  " : "  & $sec & "",10,10,100,30)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $button
			WinSetState($Fenetre,"",@SW_MINIMIZE)
			While ($heure & $min & $sec <> 0)
			If $min = 0 and $sec = 0 then 
				$heure = $heure - 1 
				$min = 59
				$sec = 60
			EndIf
			
			If $sec = 0 then 
				$min = $min - 1 
				$sec = 60
			EndIf
			$sec = $sec - 1
			$label = GUICtrlCreateLabel("" & $heure & " : "  & $min &  " : "  & $sec & "",10,10,100,30)
			sleep(1000)
		WEnd
		While 1
			$label = GUICtrlCreateLabel("Nourrissez vos famillier !",10,10,200,30)
			beep(1000)
			sleep(500)
			$label = GUICtrlCreateLabel("",10,10,200,30)
			beep(1000)
			sleep(500)
		Wend
	EndSwitch
WEnd

Quand j'enclanche mon bouton, qui me lance mon Compte a rebours a l'aide d'une boucle, J'aimerais que le

Code:
 Case $GUI_EVENT_CLOSE
            Exit
Fonctionne toujours, seulement c'est pas le cas
Et j'aimerais savoir ensuite si il est possible que la boucle s’arrête lorsque je reappuie sur ce même bouton.
Dites moi si j'ai pas était assez clair ^^ J'essayerais de mieux expliquer.
 
A

Anonymous

Invité
#2
Bonjour,
les problèmes généraux venant du ;
- sleep() ~~> qui est bloquant
- des boucle imbriquée l'une dans l'autre

j'ai fait ceci pour vous , à vous de décortiquer le tous ^^

Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $time =18000, _ ; 18000 = 5h = (3600*5)
$timeAReduire=$time, _
$Fenetre = "Form1", _
$comptARebours=True

#Region ### START Koda GUI section ### Form=
	Global $Form1 = GUICreate("Form1", 300, 300, 300, 300)
	Global $button = GUICtrlCreateButton("J'ai fini de nourrir mes familliers. Me prevenir dans 5h",25,230,250,50)
	Global $label = GUICtrlCreateLabel(affichLabel(),10,10,100,30)
	GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Local $msg
While 1
	$msg=GUIGetMsg()
	If $msg = $button Then compteARebours($Form1)
	If $msg = $GUI_EVENT_CLOSE Then Exit
	If Not $comptARebours Then
		$label = GUICtrlCreateLabel("Nourrissez vos famillier !",10,10,200,30)
		beep(1000,500)
		$label = GUICtrlCreateLabel("",10,10,200,30)
		beep(1000,500)
	EndIf
	Sleep(50)
WEnd

Func compteARebours($hGui)
	$comptARebours=True
	$timeAReduire=$time
	WinSetState($Fenetre,"",@SW_MINIMIZE)
	Local $timer=TimerInit()
	Local $i=0
	Local $msg
	Do
		$msg=GUIGetMsg()
		Sleep(100)
		$i+=1
		If $i > 10 Then
			$i=0
			$timeAReduire-=1
			GUICtrlSetData($label,affichLabel())
		EndIf
		If $msg = $GUI_EVENT_CLOSE Then Exit
	Until TimerDiff($timer)>=($time*1000)
	$comptARebours=False
EndFunc

Func affichLabel()
	Local $heure,$minute,$sec
	$heure = Floor($timeAReduire/3600) ; 5
	$min = Floor(Mod($timeAReduire,3600)/60) ; 0
	$sec = Mod($timeAReduire,60) ; 0
	Return $heure & " : "  & $min &  " : "  & $sec
EndFunc
 
A

Anonymous

Invité
#3
Super !
Un petit truc que j'ai pas trouver non plus
Comment faire pour que quand mon bouton est enclencher, le programme se minimise dans la "barre a coter de l'heure"

Et puis, dans cette partie du code,
Code:
While 1
   $msg=GUIGetMsg()
   If $msg = $button Then 
	   compteARebours($Form1)
	EndIf
   If $msg = $GUI_EVENT_CLOSE Then Exit
   If Not $comptARebours Then
      $label = GUICtrlCreateLabel("Nourrissez vos famillier !",10,10,200,30)
      beep(1000,500)
      $label = GUICtrlCreateLabel("",10,10,200,30)
      beep(1000,500)
   EndIf
   Sleep(50)
WEnd
Quand on appuie sur le bouton, est il possible que celui ci devienne deux boutons, un "Stop" et un "Reset", qui des qu'on l'enclenche, arrete et reset le compte a rebours respectivement pour les deux boutons.
 
A

Anonymous

Invité
#4
Bien sur qu'il est possible de le faire ^^
mais ca sera a vous de bosser un peu ;-)

Si vous voulez 2 bouton, va falloir changer de GUI

Je suppose que vous voulez simplement "caché" la GUI ? ^^

dans ce cas regarder vers ceci; GUISetState(@SW_HIDE)

un petit exemple;
Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Local $msg

GUICreate("My GUI") ; will create a dialog box that when displayed is centered
GUISetState(@SW_SHOW) ; will display an empty dialog box
TrayTip("panda","la fenetre va disparaitre dans 3 seconde",1000)
Sleep(3000)
GUISetState(@SW_HIDE)
TrayTip("panda","la fenetre va apparaitre dans 3 seconde",1000)
Sleep(3000)
GUISetState(@SW_SHOW)
While 1
	$msg = GUIGetMsg()
	If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
 
A

Anonymous

Invité
#6
Code:
$F1 = "{F1}"
Code:
 Func compteARebours($hGui)
   $comptARebours=True
   $timeAReduire=$time
   If $msg = $F1 then GUISetState(@SW_SHOW)
   GUISetState(@SW_HIDE) ; will display an empty dialog box
   TrayTip("","Un Bip retentira dans 5h, appuyer sur F1 pour ouvrir la fenetre.",5000)
Sauf que quand j'appuie sur F1, ca m'ouvre la GUI avec le Compte a rebours a 5:0:0 et pas avec le bon compte.
Comment je dois m'y prendre ?
 
A

Anonymous

Invité
#7
La question est que voulez vous faire avec ceci $F1 = "{F1}" ??
 
A

Anonymous

Invité
#8
J'ai ajouter le SW_HIDE comme conseiller plus haut, mais je voudrais qu'il soit possible de maximiser la GUI en appuyant sur F1, seulement comme j'ai fais la, ca m'arrete mon Compte a rebours et le reset.
 
A

Anonymous

Invité
#9
la fonction Adlibregister te sera surement utile , elle exécute une fonctions à un intervalle donné en parallèle à ton programme.

Donc fais ça pour ton compte à rebour et quand tu fera maximiser ta fenêtre , ça ne le remettra pas à 0.
 
Haut Bas