Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Detectar la inactividad en un Form


Hrmcobol
15 de julio de 2016, 21:52
Estimados, necesito detectar la inactividad de un form, o sea, que pasado determinado tiempo de inactividad el form se cierre, el tema es que tiene unas 45 opciones entre CBT, OPB y TEXT, yo activo el timer luego de la aceptación de datos.
Como hago para desactivarlo, ya que los eventos son unos 60?
Deberé poner esta opción en cada evento?
Saludos y Gracias

Rapinto
15 de julio de 2016, 22:58
Hrmcobol

Poderias tentar com o "prekeydown" da Form.
O evento é disparado antes de qualquer objecto dentro da form o apanhar.
Poderia resolver.

Experimenta e diz se funcionou.

Un saludo,
Rui Pinto

Fito
15 de julio de 2016, 23:08
hola:

Te cuento cómo lo hice:

* Tengo un timer en el menú principal seteado en un segundo, en el evento timer puse el siguiente código:


if caduce-habilita = pow-true
add 1 to caduce-seg
if caduce-seg >= caduce-tiempo
move pow-false to "active" of tmrCaduce
invoke pow-self "callform" using "usu99" "usuarios.dll"
if caduce-seg not = zeros
invoke pow-self "closeform"
end-if
move pow-true to "active" of tmrCaduce
end-if
end-if
compute caduce-falta = caduce-tiempo - caduce-seg


tengo variables globales external que están dentro de un "copy" en todos los forms.


01 variables-caduce global external.
02 caduce-cuenta pic x(10).
02 caduce-nom pic x(30).
02 caduce-clave pic x(10).
02 caduce-tiempo pic 9(4).
02 caduce-seg pic 9(4).
02 caduce-falta pic 9(4).
02 caduce-habilita pic s9(5) comp-5.
02 caduce-notiempo pic 9.


y en los eventos Prekeypress y Click de todos los formularios:


move zeros to caduce-seg.



Paso a explicar un poco.

La variable "caduce-habilita" la utilizo para habilitar o deshabilitar la función, porque cuando el usuario está realizando un proceso y éste es largo no quiero que se le corte.
"caduce-seg" es la variable donde voy contando los segundos que van pasando y "caduce-tiempo" tiene la cantidad de segundos totales que le permito de inactividad.
Cuando se cumple ese tiempo, llamo a un form para que vuelva a colocar la contraseña, si ésta falla se cierra el sistema.

Y lo que falta es en los eventos Prekeypress y Click de todos los forms, poner en cero "caduce-seg" para que cuando presione cualquier tecla o haga click comience de nuevo a contar el tiempo.

Espero haber sido claro.

Saludos.

Fito...

Kuk
16 de julio de 2016, 13:45
Hrmcobol, en la WORKING del Form defines una variable GLOBAL numérica por ejemplo GLB-TIMER.

En el Timer definido a 1 segundo, pones el código siguiente:


IF GLB-TIMER > 60 *> por ejemplo 1 minuto
INVOKE POW-SELF "CloseForm"
END-IF

ADD 1 TO GLB-TIMER


En los eventos "MouseMove" y "KeyPress" del Form, pones el código:


MOVE ZEROS TO GLB-TIMER


Listo ;)

Hrmcobol
16 de julio de 2016, 14:04
Gracias a Todooooossss !!!
Era logica la solucion, pero uno tiene momentos en los cuales el problema parece no tener solucion.

Gracias por estar alli !!!