Bonjour,
(Reprise de mon ancien message suite à un non respect des règles de présentation)
(J'espère que celui-ci sera plus en adéquation avec les règles:-)) )
Message d'origine: Posté: Jeu 21 Avr 2011 13:03
J'ai crée un petit bout de code qui effectue un compte à rebours couplé avec un TrayItem pour les différentes options du programme
Je suis confronté au comportement suivant:
lorsque j'appuie sur l'icone de mon programme, automatiquement le compteur s'arrête.
Sauriez-vous quelle option me permettrait de laisser le tourner le compteur?
Pour le compteur j'utilise la fonction AdlibRegister.
► Afficher le texte
Code : Tout sélectionner
While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $AboutItem
Msgbox(64 + 262144, "A Propos:", "Sauvegarde automatique - ScolTéléServices 0810 60 58 58")
Case $msg = $Save_NowItem
AdlibUnRegister("_Miseajour")
if $Lock = "1" then ShellExecute("c:\windows\System32\rundll32.exe","user32.dll,LockWorkStation")
Run("C:\WINDOWS\system32\wscript.exe "& $cmd_Prg,"",@SW_SHOW)
ExitLoop
Case $msg = $More5mnItem
AdlibUnRegister ("_Miseajour")
$M = Stringleft(GUICtrlRead($Label1),2)
$S = StringRight(GUICtrlRead($Label1),2)
$New_Time = _TimeToTicks ("00",$M,$S) +300000
if $New_Time > "3600000" Then $New_Time = "3600000"
_TicksToTime($New_Time,$H,$M,$S)
if StringLen($M) < "2" Then
$M = "0" & $M
EndIf
if Stringlen($S) < "2" Then
$S = "0" & $S
EndIf
GUICtrlSetData($Label1, $M&":"&$S)
$Nbre_5mn = $Nbre_5mn +1
If $Nbre_5mn = "2" Then TrayItemSetState($More5mnItem, $TRAY_DISABLE)
AdlibRegister("_Miseajour",1000)
Case $msg = $More10mnItem
AdlibUnRegister ("_Miseajour")
$M = Stringleft(GUICtrlRead($Label1),2)
$S = StringRight(GUICtrlRead($Label1),2)
$New_Time = _TimeToTicks ($H,$M,$S) +600000
if $New_Time > "3600000" Then $New_Time = "3600000"
_TicksToTime($New_Time,$H,$M,$S)
if StringLen($M) < "2" Then
$M = "0" & $M
EndIf
if Stringlen($S) < "2" Then
$S = "0" & $S
EndIf
GUICtrlSetData($Label1, $M&":"&$S)
$Nbre_10mn = $Nbre_10mn +1
If $Nbre_10mn = "2" Then TrayItemSetState($More10mnItem, $TRAY_DISABLE)
AdlibRegister("_Miseajour",1000)
Case $msg = $ExitItem
ExitLoop
EndSelect
WEnd
Réponse de Sylvanie : Posté: Jeu 21 Avr 2011 14:06
--------------------------------------------------
ne manquerait il pas un petit
--------------------------------------------------
Réponse de Sylvanie: Posté: Jeu 21 Avr 2011 15:34
--------------------------------------------------
Je viens de reproduire le problème.
Effectivement, le click sur un trayitem suspend le script en général, donc le comportement est "logique" mais embêtant.
En pseudo solution on peut quand même imaginer une fonction d'update du compteur basée sur un timediff, car du coups, l'affichage rattrape son retard quand le script reprend la main
► Afficher le texte
Code : Tout sélectionner
Opt("GUIOnEventMode", 1)
Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",3)
Opt("TrayAutoPause",0)
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 313, 156, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Label1 = GUICtrlCreateLabel("Label1", 72, 48, 36, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $delay=0.5;une demie sceconde
Global $now=TimerInit()
AdlibRegister("update_tic",1000*$delay)
$test=TrayCreateItem("Test")
While 1
Sleep(250)
WEnd
Func update_tic()
$cpt=Ceiling((TimerDiff($now))/1000)
GUICtrlSetData($Label1,$cpt)
EndFunc
Func CLOSEClicked()
Exit 0
EndFunc