Page 1 of 1

El TIMER se para si entramos 6 veces a pantalla de creacion

PostPosted: Fri Jun 15, 2007 10:58 am
by RPATON
Hola:
Estoy creando un programa para presentar los kilos de una báscula cuando se seleccione la opción. Para ello he creado un TIMER y si entro la pantalla, salgo y lo elimino con oTimer:End() si repito esta operación de 6 a 8 veces a partir de ahí no se activa el timer. Hay que salir de la aplicación y ya vuelve a funcionar refrescando los kilos pero otras 6 veces.
¿Qué puedo estar haciendo mal? Adjunto ejemplo:


FUNCTION LanzaAuto()
LOCAL oDlg
LOCAL oVisor,oTexto
LOCAL nKilos:=0
LOCAL oKilos

cAMatricula:=space(20)

DEFINE FONT oVisor NAME "Arial" SIZE 0,-180 BOLD
DEFINE FONT oTexto NAME "Arial" SIZE 0,-30 BOLD

DEFINE DIALOG oDlg RESOURCE "ENTAUTO" TITLE "Registro de Tickets"

REDEFINE SAY oKilos VAR nKilos FONT oVisor ID 200 OF oDlg UPDATE

REDEFINE GET cAMatricula ID 100 OF oDlg UPDATE


DEFINE TIMER oTimor OF oWndMain INTERVAL 500 ;
ACTION ( nKilos:=Visor(),;
oKilos:Refresh() )

ACTIVATE TIMER oTimor

ACTIVATE DIALOG oDlg CENTERED ;
ON INIT oGet8:Hide()
VALID ( oTimor:End(),.T. )


DEACTIVATE FONT oVisor
DEACTIVATE FONT oTexto


RETURN

FUNCTION Visor()

RETURN 25000 // Consulta los kilos de la bascula para el ejemplo pongo 25000

PostPosted: Fri Jun 15, 2007 10:10 pm
by Antonio Linares
En vez de crearlos y destruirlos, podrías usar siempre el mismo y usar una variable que te indique si tiene ó no que hacer algo:

DEFINE TIMER oTimor OF oWndMain INTERVAL 500 ;
ACTION If( lActivo, ( nKilos:=Visor(), oKilos:Refresh() ),)

en donde lActivo, nKilos y oKilos serían variables públicas ó static

Cambiando lActivo a .F. dejaría de hacer su trabajo

PostPosted: Sat Jun 16, 2007 11:19 am
by antolin
Utiliza oTimer:Activate() y oTimer:DeActivate().
Crea y activa el Timer antes de entrar en la funcion, y siempre que salgas lo desactivas.
A lo mejor te va bien

Solucion TIMER

PostPosted: Sun Jun 17, 2007 11:22 am
by RPATON
Siguiendo vuestros consejos he sacado el TIMER fuera de la funcion LanzaAuto() y lo he activado y desactivado al entrar y salir. He declarado Publicas las variables de dentro del TIMER y he activado a .T. o .F. la variable oApp:lTimer para que se ejecutara cuando yo le dijera.

Ahora así todo funciona.

Gracias.

Ricardo Patón