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
El TIMER se para si entramos 6 veces a pantalla de creacion
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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
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
Solucion TIMER
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
Ahora así todo funciona.
Gracias.
Ricardo Patón