Gracias por la respuesta Ximorro...
Con $Sec = @SEC antes del For, pretendia que los valores 01-59 fueran los de @SEC, es decir, Si @SEC=11 que empezara el bucle con el valor 11, que es el tiempo real...No quiero que haga sólo un conteo, sino que lo haga a partir del valor de @SEC.
Con GUIGetMsg() dentro del For, cómo me indicas, Funciona!!
Lo del Sleep se me escapa el porqué, pero funciona como has indicado. (Si disminuyo el valor de Sleep, es cierto, que pasa menos tiempo pausado, pero si aumento de 59 a 5900, habrá muchos más tiempos de pausa, aunque sean más pequeños, por lo que parece que la probabilidad de capturar el evento tendría que ser la misma...no?) Bueno la cuestión es que funciona y puedo cerrar la ventana. He probado con 590 y Sleep (100), y no es lo mismo....cierra igual pero demora más, con lo cual a mayor valor en Sleep, más demora.
Para evitar que esté continuamente escribiendo la etiqueta (visualmente hace un parpadeo que no es estético) he optado por poner el GUICtrlSetData($Ls,@SEC) fuera del For y parece que todo funciona...
Código: Seleccionar todo
#Include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Clock ", 450, 200, 192, 124);$WS_POPUPWINDOW)
GUISetBkColor(0x000000)
$font = "Comic Sans MS"
$Lh = GUICtrlCreateLabel (@HOUR, 190, 100, 15,15)
GUICtrlSetColor(-1,0xE00000)
GUICtrlSetFont(-1, 10, 400 , $font)
GUICtrlCreateLabel (":", 210, 100, 5,15)
GUICtrlSetColor(-1,0xE00000)
GUICtrlSetFont(-1, 10, 400 , $font)
$Lm = GUICtrlCreateLabel (@MIN, 220, 100,15,15)
GUICtrlSetColor(-1,0xE00000)
GUICtrlSetFont(-1, 10, 400 , $font)
GUICtrlCreateLabel (":", 240, 100, 5,15)
GUICtrlSetColor(-1,0xE00000)
GUICtrlSetFont(-1, 10, 400 , $font)
$Ls = GUICtrlCreateLabel (@SEC, 250, 100,15,20)
GUICtrlSetColor(-1,0xE00000)
GUICtrlSetFont(-1, 10, 400 , $font)
GUISetState(@SW_SHOW)
Do
If @MIN == 59 And @SEC == 59 Then
Sleep (1000)
GUICtrlSetData($Lh,@HOUR)
GUICtrlSetData($Lm,@MIN)
EndIf
If @SEC == 59 Then
Sleep (1000)
GUICtrlSetData($Lm,@MIN)
EndIF
For $i=1 to 10 Step 1
$nMsg = GUIGetMsg()
If $nMsg = $GUI_EVENT_CLOSE Then ExitLoop (2)
Next
GUICtrlSetData($Ls,@SEC)
Until $nMsg = $GUI_EVENT_CLOSE
Exit
Si comparo con la hora del PC, los segundos se corresponden, pero eso ¿es porque el conteo de For dura un segundo ¿no? y para este caso es eso lo que buscaba: que se actualizara la etiqueta cada segundo.
Vaya que es casualidad y aunque sirva para éste script, no serviría por ejemplo, para hacer un cronometro, no?