Hola, yo en hago lo siguiente, en la case base 'form' de la cual defino todos los formularios pongo un control 'Timer', En el 'KeyPress' del formulario pongo una instrucción que haga un reset al timer y lo mismo en el 'MouseMove' del form, de esta forma, cuando pulsas una tecla o mueves el ratón sobre el formulario se activa el Reset del Timer y no se dispara el método 'Timer', Si no se usa el ratón durante el tiempo especificado en el control 'Timer' o no se pulsa una tecla, se dispara el evento Timer y ahí guardo la información y cierro el formulario. Espero que te sirva.
Hola, yo en hago lo siguiente, en la case base 'form' de la cual defino todos los formularios pongo un control 'Timer', En el 'KeyPress' del formulario pongo una instrucción que haga un reset al timer y lo mismo en el 'MouseMove' del form, de esta forma, cuando pulsas una tecla o mueves el ratón sobre el formulario se activa el Reset del Timer y no se dispara el método 'Timer', Si no se usa el ratón durante el tiempo especificado en el control 'Timer' o no se pulsa una tecla, se dispara el evento Timer y ahí guardo la información y cierro el formulario. Espero que te sirva.
--
--
Matias:Te pego al pie, un sencillo pero sofisticado codigo que tengo en un prg, el cual llamo desde mi formulario principal y en mi caso no cierra la aplicacion sino que llama a un form para volver a logear al usuario cada x tiempo de inactividad.No recuerdo de donde lo tome, o quien me lo facilito, pero no es de mi propiedad salvo algunas modificaciones.*C:\PRODUCCION\FRM_CAMBIAR_USUARIO.SCX, esta linea que esta casi al final llama a mi formulario, te he dejado las lineas para cerrar y salir de la aplicacion.
aqui va el prg.CLEARPUBLIC tmrChecktmrCheck = NEWOBJECT("DetectActivity")RETURNDEFINE CLASS DetectActivity as Timer* Sólo detecta inactividad mientras está en este programa?JustInThisApp = .F.* Intervalo de inactividad tras el cual dispara OnInactivity (en segundos)InactivityInterval = 180* Intervalo cada el que chequea actividadInterval = 1000LastCursorPos = ""LastKeybState = ""LastActivity = DATETIME()CursorPos = ""KeybState = ""IgnoreNext = .T.PROCEDURE InitDECLARE INTEGER GetKeyboardState IN WIN32API STRING @ sStatusDECLARE INTEGER GetCursorPos IN WIN32API STRING @ sPosDECLARE INTEGER GetForegroundWindow IN WIN32APIENDPROCPROCEDURE DestroyCLEAR DLLS GetKeyboardState, GetCursorPos, GetForegroundWindowENDPROCPROCEDURE TimerWITH ThisIF ! .CheckActivity()* Si no hubo actividad veo si es tiempo de disparar OnInactivityIF ! ISNULL(.LastActivity) AND ;DATETIME() - .LastActivity > .InactivityInterval.LastActivity = NULL && Prevengo disparo múltiple de OnInactivity.OnInactivity()ENDIFENDIFENDWITHENDPROC* Chequeo si hay actividadPROCEDURE CheckActivityLOCAL lRetWITH ThisIF .JustInThisAppIF GetForegroundWindow() <> _VFP.hWnd* Estoy en otro programaRETURN lRetENDIFENDIF.GetCurState()IF (!.CursorPos == .LastCursorPos OR !.KeybState == .LastKeybState)IF ! .IgnoreNext && La 1ra vez no ejecutolRet = .T. && Hubo actividad.OnActivity().LastActivity = DATETIME()ELSE.IgnoreNext = .F.ENDIF.LastCursorPos = .CursorPos.LastKeybState = .KeybStateENDIFENDWITHRETURN lRetENDPROC* Devuelve el estado actualPROCEDURE GetCurStateLOCAL sPos, sStateWITH ThissPos = SPACE(8)sState = SPACE(256)GetCursorPos (@sPos)GetKeyboardState (@sState).CursorPos = sPos.KeybState = sStateENDWITHENDPROCPROCEDURE OnInactivityWAIT WINDOW "Inactividad a las " + TIME() NOWAITDO FORM "C:\PRODUCCION\FRM_CAMBIAR_USUARIO.SCX"*!* _Screen.ActiveForm.RELEASE*!* CLOSE TABLES*!* CLOSE DATABASE*!* *CLEAR ALL*!* CLEAR EVENTSENDPROC* Hubo actividadPROCEDURE OnActivity* WAIT WINDOW "Actividad a las " + TIME() NOWAITENDPROCENDDEFINE
El viernes, 7 de diciembre de 2012 03:48:10 UTC-3, Matías Mancuello escribió:Que tal amigos.. quiero saber como hacer para cerrar un formulario si no hay ningún tipo de actividad (teclado o mouse) en un tiempo determinado..Saludos!
--
--
Que tal amigos.. quiero saber como hacer para cerrar un formulario si no hay ningún tipo de actividad (teclado o mouse) en un tiempo determinado..Saludos!
--
--
--
--
--
| arti...@yahoo.es | Publicar respuesta![]() |