Mira este ejemplo
|
DEFINE CLASS InactivityMonitor AS Timer
Interval = 15 * 1000
onInactivity = "" && Codigo a ejecutar cuando se detecte inactividad
PROCEDURE Init(pnSeconds)
PUBLIC goInactivityMonitor
goInactivityMonitor = THIS
THIS.Interval = EVL(pnSeconds,15)*60*1000 && Default de 15min
ON KEY LABEL MOUSE goInactivityMonitor.Reset()
ON KEY LABEL SPACEBAR goInactivityMonitor.Reset("{SPACEBAR}")
THIS.Enabled = .T.
ENDPROC
PROCEDURE Timer
THIS.Enabled = .F.
EXECSCRIPT(THIS.onInactivity)
ENDPROC
PROCEDURE Reset(pcKeyboard)
IF VARTYPE(pcKeyboard)="C"
KEYBOARD (pcKeyboard) PLAIN
ENDIF
THIS.Interval = THIS.Interval
THIS.Enabled = .T.
ENDPROC
ENDDEFINE
Para usarla, debes colocar el siguiente codigo al inicio de tu programa:
LOCAL oIM
OIM = CREATE("InactivityMonitor",5) && 5 minutos
oIM.onInactivity = "codigo a ejecutar"
Saludos
Victor Espina
Hola Miguel,
yo trabajo siempre con Full clases y herencias por ese lado todo bien... pensaré en implementarlo de esa forma tuya con Timers (porque ya veo que no existe otra o algún api no lo sé)...
sólo un pequeño cambio, veo qe tu cuentas o te fijas si esta abierto un formulario lo cierras hasta que no te quede uno abierto y luego cierras tu sistema e invocas todo nuevamente apareciendo el Login.
Personalmente ahí esta nuestra diferencia, yo lo pensaría así y espero te sirva si deseas modificar tu funcionalidad:
Si mi tiempo se agotó solo invocaré a mi formulario LOGIN sin cerrar los formularios , ya que puede ser que el usuario dejo una tarea pendiente, un ejemplo ingresando una O/C ó Pedido ó Fondo Fijo, que son formularios que cargan muchos Items en su detalle, y este quizas no lo grabó antes y lo dejo abierto para regresar a continuar; en este caso si yo lo cierro a la fuerza estaría faltando y ocasionando quejas con mi SISTEMA. y peor aún si hay varios forms abiertos (Aunque no lo creas estas cosas suceden por más ordenando que sea el negocio y el usuario.. nos pasa).
Continuando, sólo haría que se cargue nuevamente mi LOGIN Modal pero este cargaría con el mismo usuario de ese equipo o logeado en ese equipo y desabilitado el texto para que no lo cambie por ningún otro, solo digitaría su contraseña (sabemos que esto se hace pasándole parámetros en el init y activando o desactivando la caja de texto de usuario).. de esta forma ya no corres el riesgo que otro usuario entre con su usuario y contraseña y vea los Forms que quedaron abiertos.
Entonces cuando el usuario correcto regrese introducirá su contraseña y volverá a ver su formulario que dejo a medias de trabjar y continuará registrando.
SALUDOS.
Samuel - Lima-Perú
El 21/02/12, Walter R. Ojeda Valiente <wr...@hotmail.com> escribió:
>
> Pregunta:
>
> ¿Por qué la barra espaciadora y no CUALQUIER TECLA?
>
> En mi caso, si presiona cualquier botón del mouse o cualquier tecla se
> reinicia el Timer, ya que evidentemente algo está haciendo el fulano.
>
> Saludos.
>
> Walter.
>
>
>