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

Post Reply
RPATON
Posts: 41
Joined: Tue Mar 28, 2006 8:21 pm
Location: CIUDAD REAL (ESPAÑA)

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

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
antolin
Posts: 475
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Post 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
RPATON
Posts: 41
Joined: Tue Mar 28, 2006 8:21 pm
Location: CIUDAD REAL (ESPAÑA)

Solucion TIMER

Post 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
Post Reply