Como hacer un temporizador?

1,089 views
Skip to first unread message

Luis Eduardo Zaleta Montes

unread,
May 19, 2014, 5:40:13 AM5/19/14
to publice...@googlegroups.com
Buenas
tengo un pequeño problema.
tengo un form que tiene un pequeño temporizador que empieza desde 20s y va disminuyendo.

Mi problema que tengo es que, solamente lo pude hacer funcionar automaticamente,
cada vez que se inicia el form empieza el temporizador a funcionar y cuando llega a 0s regresa a 20s de nuevo.

quisiera saber como puedo hacer un boton que Inicie el contador en 20s y siga disminuyendo hasta 0 para no tener que ejecutar a cada rato el form y llegando ha 0s se detenga y no siga avanzando a -1, -2 , -3 etc.
y un boton para poder pausar el temporizador

este es el codigo que tengo:

FORM:(INIT)
Public a
a = 0

Timer:


ThisForm.Lblcrono.Caption = ALLTRIM(STR(20-a))
a = a + 1
IF a = 20
a = 0
ENDIF

Fidel Charny

unread,
May 19, 2014, 8:38:14 AM5/19/14
to publice...@googlegroups.com
No entiendo cuál es la idea. De todos modos digo lo siguiente
Botón de arranque: cmdArranque (commandbutton)
Botón de Stop: cmdDetiene (commandbutton)
Control Timer: tmrCrono (timer)
Visor: txtCrono (textbox)

Init del formulario:
with this.tmrCrono
        .Enabled=.f.
        .Interval=100
endwith

    PROCEDURE cmdArranque.Click
        ADDPROPERTY(thisform,"nSeconds",SECONDS())
        ADDPROPERTY(thisform,"qSeconds",20) && Acá puedes decidir si son 20 segundos, más o menos. Para probar, 20s es demasiado.
        thisform.tmrCrono.Enabled=.t.
    ENDPROC

    PROCEDURE cmdDetiene.Click
        thisform.tmrCrono.Enabled=.f.
    ENDPROC



    PROCEDURE tmrCrono.Timer
        LOCAL lnSeconds
        lnSeconds=SECONDS() - thisform.nSeconds
        thisform.text1.Value=thisform.qseconds - lnSeconds
        IF lnSeconds>thisform.qseconds
            MESSAGEBOX("transcurrienron "+TRANSFORM(thisform.qseconds)+" segundos")
            thisform.nSeconds=SECONDS()
        ENDIF
       
    ENDPROC

Luis Maria Guayan

unread,
May 19, 2014, 9:41:20 AM5/19/14
to publice...@googlegroups.com
VFP tiene su propio objeto Timer.

Mira en la ayuda de VFP sobre el objeto Timer

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Fidel Charny

unread,
May 19, 2014, 11:06:09 AM5/19/14
to publice...@googlegroups.com
Pos, que yo creí que había puesto un Timer... Por ahí le puso Interval=1000 y por eso hace ese conteo.
Esto del interval=1000 se me ocurre ahora. Supongamos
*Form.Init
with this.tmrCrono
      .interval=1000
      .Enabled=.F.
endwith

*<cmdArranque.Click>
ADDPROPERTY(thisform,"nSeconds",0)
ADDPROPERTY(thisform,"qSeconds",20)
thisform.txtCrono.Value=thisform.qSeconds
thisform.timer1.Enabled=.T.
*</cmdArranque.Click>

*<tmrCrono.Timer>
WITH thisform
    .nSeconds=.nSeconds+1
    IF .nSeconds>.qseconds
        .nseconds=0
    ENDIF
    .txtCrono.Value=.qseconds - .nseconds
ENDWITH
*</Timer1.Timer>

*<cmdStop.Click>
thisform.tmrCrono.Enabled=.F.
*</cmdStop.Click>

Esto funciona. Cuando llega a cero explota la bomba!!!

Fidel Charny

unread,
May 19, 2014, 11:13:42 AM5/19/14
to publice...@googlegroups.com
Ah, si, tenés razón Luis María:

*<txtCrono.programmaticchange>
IF thisform.tmrCrono.Enabled AND Empty(this.value)
    Thisform.tmrCrono.Enabled=.f.
    MESSAGEBOX("BOOOOOMMMMMM!")
ENDIF
*</txtCrono.programmaticchange>

andrea Kummers

unread,
May 19, 2014, 11:23:38 AM5/19/14
to publice...@googlegroups.com
Aplausos a Fidel Charny, hace un tiempo me ayudó con un TIMER y funciona perfecto. Estoy ofreciendo mi aplicación en los 17 países de habla hispana y bueno hoy vi una luz de esperanza, desde un lugar de CHIIIIIIIIIILE, tal vez el país donde hablan con más simpatía el español, sobre todo las chicas de Antofagasta.
También me pidieron una explicación desde Australia y con mucho pesar comuniqué en Inglés para qué era el aplicativo, pero oculté que por culpa indirecta de Bill el de M$ me queda difícil traducirlo por ejemplo al Rumano, principalmente porque no sé sino una palabra,........, FRANELA, o sea esa camisa desaliñada que se coloca uno encima del pecho se llama igual en Rumano que en Español.

Luis Eduardo Zaleta Montes

unread,
May 19, 2014, 12:59:15 PM5/19/14
to publice...@googlegroups.com
Muchas Gracias Fidel Charny Y a los que me ayudaron
ya quedo el temporizador :D!
Reply all
Reply to author
Forward
0 new messages