Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cerrar un Formulario por Rango de Tiempo (https://www.clubdelphi.com/foros/showthread.php?t=74553)

BPL 24-06-2011 23:34:44

Cerrar un Formulario por Rango de Tiempo
 
hola....

necesito saber si existe en delphi 7 algun componente o algo similar
que pueda maneja un Time en donde si presiono alguna tecla no haga nada (es por que alguien esta trabajando) pero si no ha presionado ninguna tecla por 3 minutos que me cierre el formulario...

ojala exista algo.....
gracias.....

ecfisa 24-06-2011 23:51:57

Hola.

No sé de ningún componente que haga eso, pero no es difícil de implementar:
Código Delphi [-]
implementation

procedure TForm2.FormShow(Sender: TObject);
begin
  KeyPreview:= True;// el form recibe eventos de teclado antes que el control activo
  Timer1.Interval:= 60000*3; // 3 minutos
  Timer1.Enabled:= True;
end;

procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
begin
  // 3 minutos más...
  Timer1.Enabled:= False;
  Timer1.Enabled:= True;
end;
...
...
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  Close;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Timer1.Enabled:= False;
  Action:= caFree;
end;

end.

Saludos.

oscarac 24-06-2011 23:53:12

me imagino que puedes usar el componente TIMER colocandole el tiempo de 3 minutos para que se cierre, lo combinas con los eventos onkey.... y OnMouse...para colocar en cero el contador en caso alguien este utilizando el form y listo

oscarac 24-06-2011 23:56:12

debo ser mas rapido.. mientras yo escribia... Flash ecfisa ya colocaba una respuesta

BPL 25-06-2011 00:04:58

efcisa....gracias...lo implemente y resulto perfecto....

te pasaste.....

ecfisa 25-06-2011 00:06:47

Hola BPL.

De nada, me alegro que te haya servido. :)

Saludos.

oscarac 25-06-2011 00:07:03

Cita:

Empezado por ecfisa (Mensaje 404786)


:D:D:D

jajajajajajaja ya ves lo que digo? jajajajaja muy buena...

oscarac 25-06-2011 00:08:18

Cita:

Empezado por ecfisa (Mensaje 404783)
Hola.

No sé de ningún componente que haga eso, pero no es difícil de implementar:

Código Delphi [-]
implementation

procedure TForm2.FormShow(Sender: TObject);
begin
KeyPreview:= True;// el form recibe eventos de teclado antes que el control activo
Timer1.Interval:= 60000*3; // 3 minutos
Timer1.Enabled:= True;
end;

procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
begin
// 3 minutos más...
Timer1.Enabled:= False;
Timer1.Enabled:= True;
end;
...
...
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Close;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.Enabled:= False;
Action:= caFree;
end;

end.





Saludos.


y si solo mueven el mouse ? se cerraria igual verdad?
agregale los eventos onMouse....... :D:D:D

ecfisa 25-06-2011 00:10:37

jaja, quité la imágen por que me pareció inapropiada.... pero en este caso fuiste más rápido :D:D:D

En ese caso tendría que agregar el mismo código de refresh del timer en el evento OnMouseMove como bíen decis vos.

Saludos. :)

Chris 25-06-2011 22:14:36

Auque la solución propuesta por ecfisa es valida. Puedes probar algo más cómo y simple. Utiliza la API de Windows. Precisamente la función GetLastInputInfo.
Código Delphi [-]
var
    LastInputInfo: PLASTINPUTINFO;
begin
    if GetLastInputInfo(LastInputInfo) <> 0 then
        if LastInputInfo.dwTime => (60000 * 3) then
            Self.Close;
end;

El procedimiento anterior lo puedes utilizar en un Timer que se ejecute ciclícamente entre un periodo determinado.

Saludos,
Chris

PD: @oscarac: Vieras como me reí de la fotode ecfisa que has colgado... jajaja :D :D :D


La franja horaria es GMT +2. Ahora son las 03:55:20.

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