Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Bloquear aplicación por inactividad

Hola compañeros, se me ha ocurrido este caso y quisiera aplicarlo a mi sistema, y es que cuando el usuario no está utilizando el sistema, ya sea, abriendo forms, click a botones, consulta de datos y que en un tiempo determinado vamos a decir en 5 minutos me salga una ventana de login encima de la aplicación como una medida de seguridad en caso que el usuario deba pararse e ir al baño, no se si me entendieron, alguno conoce algun truco o codigo?.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 05-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Hola.

Pues yo hice eso una vez, de esta manera:

-Creo una variable global contador, y en FormCreate la inicializo a cero.
-Pongo un Timer, Interval 60000, que en OnTimer incremente el valor de dicha variable.
-Creo un procedure que resetea la variable (y puede que haga algo más), lo llamo siempre que hago algo (clicks en los menús, escribir...).
-En el evento OnTimer, comprobar si el contador supera al tiempo máximo de espera (en minutos), y si es así, llamar a un procedimiento de Bloquear (si el programa se bloquea por no estar siendo usado, pues ya puedes añadir la opción de que el usuario lo bloquee a placer antes de ausentarse).


Salu2

P.D.: Mira en "Temas similares", más abajo
Responder Con Cita
  #3  
Antiguo 06-03-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Bueno, gracias a ixMike por su ayuda pude hacer el siguiente codigo (aunque es mejorable, pero sirve):

Código Delphi [-]
var
  Incio: TIncio(Form);
  Contador: Integer;

procedure Tincio.FormCreate(Sender: TObject);
var Contador, TiempoBloqueo: Integer;
begin
  Contador:=0;  
end;

en el OnTimer del Timer:

procedure Tincio.Timer1Timer(Sender: TObject);
begin
Inc(Contador);
if Contador = 5 then
  begin
    ShowMessage('El sistema se bloqueó');
  end;
end;

en el OnMessage de un ApplicationEvents:

procedure Tincio.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
if
  ((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST))
  or
  (Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST)
  then
    begin
      Contador := 0;
    end;

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 06-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Con el personal esto hace mejor efecto:
Código Delphi [-]
var
  Incio: TIncio(Form);
  Contador: Integer;

procedure Tincio.FormCreate(Sender: TObject);
var Contador, TiempoBloqueo: Integer;
begin
  Contador:=0;  
end;

en el OnTimer del Timer:

procedure Tincio.Timer1Timer(Sender: TObject);
begin
Inc(Contador);
if Contador = 5 then
  begin
    MessageBox(Handle, 
             PChar('Si este G..... No viene en cinco minutos esta despedido.' + #13#10 + 
                   'Ahh, y que no me venga con cuentos de que le dolía el estomago.'), 
             PChar('Sistema bloqueado'),
             MB_OK + MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
  end;
end;

en el OnMessage de un ApplicationEvents:

procedure Tincio.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
if
  ((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST))
  or
  (Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST)
  then
    begin
      Contador := 0;
    end;
Saludos
Responder Con Cita
  #5  
Antiguo 06-03-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Código Delphi [-]
if Contador = 5 then
  begin
    MessageBox(Handle, 
             PChar('Si este G..... No viene en cinco minutos esta despedido.' + #13#10 + 
                   'Ahh, y que no me venga con cuentos de que le dolía el estomago.'), 
             PChar('Sistema bloqueado'),
             MB_OK + MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
  end;

Jajaja, esa estuvo buena, lo voy a poner despues de cada n veces que sale el mensaje.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 06-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral
Si este G..... No viene en cinco minutos esta despedido.
'Ahh, y que no me venga con cuentos de que le dolía el estomago.
Mas sabe el diablo por VIEJO KBRON que por diablo,

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 06-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
¿Qué has hecho, Caral? ¡Has desvirtuado el hilo!

Y encima la gente sin firmar con la nueva norma:

Salu2.

(+1) <-- esta es la nueva norma para respuestas en hilos desvirtuados
Responder Con Cita
  #8  
Antiguo 06-03-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Mas sabe el diablo por VIEJO KBRON que por diablo,

Salud OS
Si me mudo a Costa Rica y consigo un trabajo en una compañía cuyo dueño se llama Carlos Al... me devuelvo a mi pais.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #9  
Antiguo 06-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por ixMike Ver Mensaje
¿Qué has hecho, Caral? ¡Has desvirtuado el hilo!

Y encima la gente sin firmar con la nueva norma:

Salu2.

(+1) <-- esta es la nueva norma para respuestas en hilos desvirtuados
Cita:
Usuarios Activos: 104 (51 Miembros y 53 visitantes.)

[egostar], Administrador, AFilth, alquimista, aog, ayanokoyi, AzidRain, b3nshi, bachasman, BlackDaemon, byfali, [Caral]+, cascarrabias, [cHackAll]*, [D-MO], dtomeysoto, [eduarcol]+, emniram, enecumene, everfbs, FAGD, [fer21unmsm], filigara, georgejg, ixMike, jandok238, JavierLorenz, jhonny+, Jochema, juanblack, Kastor, Lisandro, mikegdl, mjjj, noisesofba, nokia, paladincubano, Paradiso, peccatum, ponchoanz, regisfree, rulo_m, santus, serebi, serg, sofprogrex, superfer17, Tal, ucanneo, xander, XBart
Aprovechen que ahora solo hay 2 moderadores en el foro, si se ponen pesados llevan la de perder

Salud OS

Corrijo: Solo UNO jajaja
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 06-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno, que os parece asi:
Código Delphi [-]
MessageBox(Handle, 
             PChar('Si El Estupendo Empleado a cargo de este equipo No viene en cinco minutos' + #13#10 + 
                   'Nos veremos en la necesidad de llamarle muy respetuosamente la atención.' + #13#10 + 
                   'Ahh, Si ha tenido algún problema Estomacal, por favor Darse La semana Libre.' + #13#10 + 
                   '                                APLICAN RESTRICCIONES'), 
             PChar('Amigo, Empleado del alma, El Sistema se esta Bloqueando'),
             MB_OK + MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
Saludos
Responder Con Cita
  #11  
Antiguo 06-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Aprovechen que ahora solo hay 2 moderadores en el foro

Corrijo: Solo UNO jajaja
La corrección no es correcta (¿antinomia?), hay uno que siempre está "invisible".
Responder Con Cita
  #12  
Antiguo 06-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Ups, me dejé la firma...

(+2)
Responder Con Cita
  #13  
Antiguo 06-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por ixMike Ver Mensaje
La corrección no es correcta (¿antinomia?), hay uno que siempre está "invisible".
Cuentalos amigo ixMike.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #14  
Antiguo 06-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Cuentalos amigo ixMike.
vaya, vaya... desconocía ese detalle...

(+1)
Responder Con Cita
  #15  
Antiguo 25-03-2008
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
Añado mi pregunta a este post, para no abrir uno nuevo.
Lo de bloquear me quedo claro y funcionando; lo que quiero hacer y no se me ocurre como es que se cierren todas las ventanas (abiertas modalmente, en mi caso, y en cascada tal ves) menos el Form ppal. al cual se inhabilita el menu salvo la opcion de login.
Bueno gracias a todos.
Responder Con Cita
  #16  
Antiguo 25-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Supongo es una aplicación MDI, sólo tendrías que mostrar la ventana de login en forma modal, eso ya deja inhabilitado el resto de las ventanas. Supongo que una vez registrado el ususario, inhabilitarás las opciones que no tenga permiso, y todo queda OK.

Yo no cerraría las ventanas, puede que haya dejado una tarea a medias, o que al cerrar sus ventanas pierda "el hilo de por donde iba".

De todas formas, cerrar las ventanas mdichild es un bucle por frmmdi.MdiChildCount ejecutando FrmMdi.MdiChildren[i].Close;

La ventana modal tiene truco, se supone que es modal porque necesita una respuesta por parte del usuario y cerrarla cancelando las modificaciones.... no sé yo. Puedes tener una bandera en las ventanas modales o un evento que le informe que se cierre automáticamente, pero esto ya depende de cómo tengas implementadas dichas ventanas modales, ¿puedes mostrar algo de código para saber cómo las creas? (hay varios métodos).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #17  
Antiguo 26-03-2008
FrancisR FrancisR is offline
Miembro
 
Registrado: ene 2008
Posts: 11
Poder: 0
FrancisR Va por buen camino
Zarko Gajic utiliza esta función del API de Windows:


Código Delphi [-]function SecondsIdle: DWord;
var
liInfo: TLastInputInfo;
begin
liInfo.cbSize := SizeOf(TLastInputInfo) ;
GetLastInputInfo(liInfo) ;
Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject) ;
begin
Caption := Format('System IDLE last %d seconds', [SecondsIdle]) ;
end;





La desventaja es que solo vale para Windows 2000 en adelante.

La ventaja, es que es totalmente limpia y fiable.

Respecto a las ventanas en una aplicación modal puedes jugar con screen.activeform.formstyle.

Saludos,

FrancisR
Responder Con Cita
  #18  
Antiguo 26-03-2008
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
en primer lugar no es una aplicacion MDI, de lo contrario usaria un bucle como dice Lepe, que tambien lo he leido en este foro. Pero podria haber sido tal. Pues tengo un form ppal del cual parten hacia forms secundarios que realizan ABM de modulos diferentes, en los cuales hay forms de imput, visualizacion etc, que tamb. son modales.
Mi idea; que cada form tenga por ejemplo un procedure cancelar que se ejecutara en tal caso (inactividad) y este sabra que hacer (cancelar) segun sean las tareas que se realizan en dicho form, cancelar todos los que se abrieron desde este y luego cerrarse. Tenia pensado bruto pero ligero, armar una cadena ejemplo: ppal@ModuloClientes@AltaCliente , y que cuando le diga a ppal.cancelar, este busca todos los form que esten abiertos (ModuloClientes para este ej.) y los cancele.
Responder Con Cita
  #19  
Antiguo 26-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pues toma el bucle del objeto TScreen. Al contrario de lo que parece, ese objeto mantiene una lista de todas tus ventanas creadas.

TFrmCliente(Screen.Forms[1]).Loquesea
Screen.Forms[2].Close;

Tienes varias formas:
- Programando el OncloseQuery de tal manera que al ordenar el cierre de esa ventana, se ejecuta dicho evento, que tomará las decisiones oportunas. En este caso no puedes diferenciar si el usuario cerró la ventana o es el Idle.

- Creando un procedimiento "universal" y heredando.
La idea es crear un FormBase que implemente el procedimiento de cierre. Ahora todas tus ventanas heredan de él (no es complejo), y cada uno hace lo que tenga que hacer.

Esto es lo que uso con más de 30 ventanas y es una maravilla. File -> new Form:
Código Delphi [-]
type TBaseForm = Class(TForm)

public
   procedure Cierra(...parametros); virtual;abstract; 
end;
Lo guardas como "UBaseForm.pas"

Ahora abres tus ventanas, las que ya tienes en tu programa, se verán así:
Código Delphi [-]

type TFrmCliente = class(TForm) 
....
....
end;
La modificas para que quede así (a mano, vamos):
Código Delphi [-]
uses UBaseForm;

type TFrmCliente = class(TBaseForm) <<<<<<<< Ahora hereda de nuestra ventana
....
public
  procedure Cierra(... mismos parametros); override; <<<<<< declaramos la funcion y le decimos que vamos a redefinir (override) su comportamiento
....

end;

implementation

procedure TFrmCliente.Cierra(... mismos parametros); <<<<< La implementamos, claro.
begin
 lo que tenga que hacer esta ventana.
end;

Ahora puedes hacer un bucle por el objeto TScreen, haciendo que cada ventana ejecute su propio código:
Código Delphi [-]
for i:=0 to screen.FormCount-1 do
   TBaseForm(Forms[i]).Cierra

En realidad, esto se llama herencia visual y se hace al revés, es decir, primero creas el BaseForm y cada vez que necesites una ventana nueva vas a File -> new -> (pestaña con el nombre de tu programa) -> elijes el TBaseForm y aceptas.

Cómo tú ya tienes todas las ventanas creadas, tienes que hacerlo a mano.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 26-03-2008 a las 16:13:47.
Responder Con Cita
  #20  
Antiguo 26-03-2008
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
miles de gracias, Lepe , FrancisR y todos aquellos que hayan leido y al menos pensado en una respuesta a mi problema.
Me imprimo esta parte y cuando llego a casa probar, luego comento los resultados. Gracias a todos.

Última edición por juanlaplata fecha: 26-03-2008 a las 17:35:39.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Bloquear aplicacion despues de cierto tiempo Marcela Conexión con bases de datos 26 16-04-2017 23:47:23
Cerrar ventana a los 10 min. de inactividad jamonete2 OOP 4 10-06-2005 18:18:53
Detectar paso a inactividad oworty API de Windows 2 07-11-2004 14:22:17
Desconexion de la aplicacion por inactividad utilizando META mamen .NET 10 08-09-2004 14:52:52
Desconexion de la aplicacion por inactividad mamen .NET 8 14-07-2004 08:32:42


La franja horaria es GMT +2. Ahora son las 09:15:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi