Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2005
Esau Esau is offline
Miembro
 
Registrado: may 2003
Ubicación: Canto Rey
Posts: 140
Poder: 21
Esau Va por buen camino
Application.Terminate

Hola Amigos hace mucho tiempo que no venia por aqui, bueno les contare que tengo una aplicacion multiusuario , que hace varias cosas... bueno el punto es que en ocasiones los usuarios dejan sus pantallas en las que estan trabajndo abiertas, lo que quiero es que pasado un tiempo de inactividad , el sistema termine la aplicacion o en todo caso bloquee la aplicacion en la que esta trabajndo hasta que se registre denuevo....
la idea es esa.... hay algo parecido en power builder... creo que en delphi tambien se puede hacer... trabajo en Delphi 7.0

gracias
Responder Con Cita
  #2  
Antiguo 24-04-2005
slat slat is offline
Miembro
 
Registrado: jun 2004
Posts: 12
Poder: 0
slat Va por buen camino
puedes usar la funcion getlastinputinfo que devuelve el tiempo que ha transcurrido desde que se produjo la ultima pulsacion de teclado o movimiento de raton.
Pon un timer que en su evento OnTimer revise el tiempo que lleva inactiva la aplicacion mediante esta funcion y que si es superior al que tu le indiques cierras la aplicacion.

Saludos.
Responder Con Cita
  #3  
Antiguo 25-04-2005
Esau Esau is offline
Miembro
 
Registrado: may 2003
Ubicación: Canto Rey
Posts: 140
Poder: 21
Esau Va por buen camino
Ok lo probare

nunca pense que fuera tan facil
gracias...
Responder Con Cita
  #4  
Antiguo 02-05-2005
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
En que unidad está la función 'getlastinputinfo' , o cuales son los parametros que recibe y lo que devuelve.
Saludos.
Responder Con Cita
  #5  
Antiguo 02-05-2005
slat slat is offline
Miembro
 
Registrado: jun 2004
Posts: 12
Poder: 0
slat Va por buen camino
esta es la pagina del msdn donde se explica detalladamente esta funcion

http://msdn.microsoft.com/library/de...tinputinfo.asp
Responder Con Cita
  #6  
Antiguo 06-05-2005
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
var
 a: tagLASTINPUTINFO;
 b: integer;
 c: integer;
begin
  GetLastInputInfo(a);
  b := a.cbSize;
  showmessage(inttostr(b));
  c := a.dwTime;
  showmessage(inttostr(c));
end;
Lo he intentado pero no logro comprender el sentido de esta funcion.
b siempre da resultado 1 y c es como el interval siempre da un número en decremento, pero no se como obtener el tiempo desde que se pulsó una tecla o el ratón.
Gracias anticipadas.
Responder Con Cita
  #7  
Antiguo 06-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues yo tampoco sé muy bien donde usarlo.

He añadido un ApplicationsEvents (en delphi 6) y en los eventos Activate y Desactivate he añadido este código:
Código Delphi [-]
procedure TForm1.ApplicationEvents1Activate(Sender: TObject);
var
 a: tagLASTINPUTINFO;
 b: integer;
 c: integer;
begin
  a.cbSize:= SizeOf(a);
  GetLastInputInfo(a);
  Label1.Caption := IntToStr(a.dwTime - last);
  LAST:= a.dwTime;

end;

LAST es una variable global de la unidad, y sí efectivamente da los valores correctos, es decir, pones en marcha el programa, te vas a otro programa y despues vuelves, y en el label te aparece el tiempo de inactividad que ha pasado (en milisegundos).

El problema es buscar donde poner ese código, evidentemente en el Activate no nos sirve, en el OnIdle del ApplicationsEvents, tampoco, ya que ese evento se produce entre ciclos muy cortos, y obtenemos siempre un cero

Dentro de un Timer tampoco, ya que el timer está ejecutando código, por tanto la aplicación no está realmente parada.

Con ayuda de este club lo implementamos de esta otra forma:
Código Delphi [-]
{ DONE -cINTERFAZ : Bloquear Aplicacion cada cierto tiempo }
procedure ActualizaUltimoAcceso();
begin
  // bloqueo implementado mediante timer
  Timer1.Interval := gl.Bloqueo.Time * 60000;
  timer1.Enabled  := false;
  timer1.Enabled  := gl.Bloqueo.AutoBlock;

end;
procedure TFrmMdi.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
  R: TRect;
begin

  // interceptamos eventos de teclado y ratón
  if ((Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST)) or
    ((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST)) then
    dtm.ActualizaUltimoAcceso;

end;
Esta solución está más que probada y funciona

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 06-05-2005
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Con la ayuda de todos, creo que he conseguido lo que quería.Gracias.
Tiempo es una variable global a la unidad.
interval = 1sg.
transcurrido 5 sg. si no se ha pulsado tecla o movimiento del ratón, la aplicación termina.
Código Delphi [-]
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if ((Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST)) or
    ((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST)) then
   tiempo := 0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  inc(tiempo);
  if tiempo > 5 then
    application.Terminate;
end;
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


La franja horaria es GMT +2. Ahora son las 03:11:38.


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