Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Cerrar formularios pasado un tiempo

Hola,

Tengo varios paneles dentro del form principal y varios formularios en una aplicación, el tema es que me gustaría que los paneles y los formularios que hacen referencia a un determinado tema no se puedan quedar abiertos si no se están utilizando durante un tiempo, pero no se si existe alguna forma de saber si alguien está utilizando un TPanel en concreto o un formulario en concreto para, una vez pasado el tiempo estipulado se cierren solo esos formularios y esos paneles y no toda la aplicación.

Espero que se entienda lo que quiero hacer y si no pues lo intento explicar otra vez.

Saludos.
Responder Con Cita
  #2  
Antiguo 08-02-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
tiempo

de momento se me ocurre que en el evento onexit del panel actives un times con un intervalo que tu mismo puedes determinar. el la propiedad interval de este.

por ultimo programes en el ontimer del timer que se cierre el panel al cumplirse ese intervalo.
Responder Con Cita
  #3  
Antiguo 08-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola,

creo que no me he explicado bien, yo tengo varios paneles, los utilizo como si fueran distintas pantallas pero dentro del mismo formulario, por medio de un statusbar me voy moviendo por todos los paneles que tenga visibles en ese momento, hay un panel que quiero ocultar si no se está utilizando pero no se como saber si se está utilizando un panel u otro a no ser que en cada uno de los componentes que tenga el panel que quiero ocultar le ponga un código para reiniciar un timer en el onmousemove, por ejemplo. Quería saber si existe otra forma menos tediosa de conseguir lo que quiero.

Saludos.
Responder Con Cita
  #4  
Antiguo 08-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Por lo que entiendo tienes varios paneles.
Para que esten activos, osea en uso, tienen que estar visibles.
Si estan visibles pero no los quieres usar esperando cierto tiempo entonces los escondes.
Si es asi, aqui tienes un ejemplo sencillo.
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 03-02-2015 a las 19:52:44.
Responder Con Cita
  #5  
Antiguo 09-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola Caral, gracias por tu tiempo.

He probado lo que me propones, he tenido que modificar la comprobación del tiempo cuando llega al que hemos establecido de la siguiente manera:

Código Delphi [-]
  If TimeToStr(Time) = TimeToStr(Tiempo) then
    begin
      TPanel(comp).Visible:= False;
    end;

Porque cuando hacía la comprobación no los consideraba iguales, de todas formas no es realmente lo que quiero, digamos que de los tres paneles que me has dibujado en tu ejemplo estoy utilizando el panel1, me muevo por él, pincho en él o en algún componente que contenga, pero el panel2 y el panel3 no los estoy utilizando, pasado el tiempo establecido quiero que se me cierren el panel2 y el panel3 pero no el 1 que si que lo estoy utilizando.

Espero que se entienda.

Saludos.
Responder Con Cita
  #6  
Antiguo 09-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Usa el tag del panel.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 09-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
, no se a que te refieres, dices que use el tag del panel, ¿como vigía?, por ejemplo, si estoy usando el panel1 a este le pongo el tag:=1 y a los demás el tag:=0, entonces pasado el tiempo miro los que tienen 0 y los cierro, ¿algo así?, si te refieres a eso se me ocurre que, si tengo abierto un panel en primer plano pero no lo estoy utilizando porque me he ido a tomar cafe, en realidad no lo estoy utilizando, por lo que se debería cerrar. Si cuando cambio de panel pongo el que tengo activo en 1 en el tag y el resto en 0 se me cerraran todos los que pongan 0 cuando llegue el tiempo deseado aunque los haya estado usando en el último segundo y lo que quiero es que no se cierren hasta que haya pasado un tiempo sin utilizarse.

A lo mejor es que no he pillado a que te referías con el tag.

Saludos.
Responder Con Cita
  #8  
Antiguo 09-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Pregunto:
Los usaras con el mouse ?.
Se podria hacer un procedimiento para que vea la posicion de raton, algo asi:

Código Delphi [-]
procedure TForm1.posicion;
 var
  pt:tpoint;
begin
 getcursorpos(pt);
 label1.Caption:= inttostr(pt.x)+'   '+inttostr(pt.y) ;
end;

Esto te dara la posicion x e Y del raton, con esto puedes saber si el raton esta encima del panel y cerrar los demas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 09-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Te tengo que pedir perdón Caral porque te voy dando la información a cuentagotas, sí, utilizo el ratón para moverme por el panel y sus componentes, pero también el teclado, además el panel que estoy utilizando lo pongo en Align:=AlClient por lo que los demás se quedan detrás, entonces voy añadiendo los nombres de los paneles que tengo abiertos en un statusbar, al pulsar sobre el nombre del panel que quieres ver te lo trae al frente. tu solución valdría si los paneles tuvieran una posición fija cada uno, sabiendo la posición del panel y la del mouse.

Una solución que me sirvió una vez para una aplicación que quería que se cerrase si no se estaba utilizando fué la siguiente:

Código Delphi [-]
procedure TFrmMenuCompras.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
//RATON
if (Msg.message = WM_MOUSEMOVE) then
  begin
    timer1.Enabled:=false;
    timer1.Enabled:=true;
  end
// TECLAS
else
  begin
    // Pulsada tecla...
    if  (Msg.message = WM_KEYDOWN)     or (Msg.message = WM_KEYUP)       or
        (Msg.message = WM_SYSKEYDOWN)  or (Msg.message = WM_SYSKEYUP)    or
        (Msg.message = WM_ACTIVATE)    or (Msg.message = WM_NCACTIVATE)  or
        (Msg.message = WM_ACTIVATEAPP) or
        (Msg.message = WM_LBUTTONDOWN) or
        (Msg.message = WM_RBUTTONDOWN) or (Msg.message = WM_MBUTTONDOWN) then
      begin
        timer1.Enabled:=false;
        timer1.Enabled:=true;
      end;
  end;
end;

Pero esto era para cerrar la aplicación entera no una cierta parte de la aplicación.

Espero que así se entienda mejor.

Última edición por ElDioni fecha: 09-02-2012 a las 19:28:50.
Responder Con Cita
  #10  
Antiguo 13-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola,

quería especificar que además de querer cerrar los paneles que estabamos comentando, que se encuentran dentro de un mismo form, también quiero cerrar otros formularios cuando pase un tiempo determinado sin usarse.

Saludos.
Responder Con Cita
  #11  
Antiguo 13-02-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ElDioni.

Te agrego otra idea derivando una clase de TPanel, por ahí te puede servir...

Saludos.
Archivos Adjuntos
Tipo de Archivo: zip ElDioni.zip (4,2 KB, 7 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 13-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Quiero poner una queja formal.
Los codigos de mi amigo ecfisa me están dejando mal parado.
Asi no se vale.
Saludos
PD: Muy bueno amigo, muy bueno.
__________________
Siempre Novato
Responder Con Cita
  #13  
Antiguo 14-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola ecfisa,

muchas gracias por el código, está cojonudo, voy a adaptarlo a mi programa para ver como queda y os cuento, pero en principio, con el vistazo que le he dado así por encima, creo que me va a servir para lo que pretendía.

Gracias de nuevo, y a ti también Caral gracias por tu tiempo.

Saludos.
Responder Con Cita
  #14  
Antiguo 14-02-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Bueno, lo he estado probando y efectivamente me sirve y mucho, le he tenido que añadir el siguiente código porque sino no reiniciaba el contador del timer.

Código Delphi [-]
procedure TForm1.PanelEnter(Sender: TObject);
begin
  (Sender as TPanel).FTimer.Enabled:=false;
  (Sender as Tpanel).TimeToClose:= 10000;
  (Sender as TPanel).FTimer.Enabled:=true;
end;

Me faltaría poder cerrar el panel que tiene el foco si en realidad, aunque tenga el foco, no se está utilizando. Voy a ver si se me ocurre algo.

Saludos y gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Cerrar Formularios con la Tecla ESC sleep25000 Varios 2 30-06-2011 14:08:33
Cerrar formularios zvf OOP 2 28-04-2006 18:11:34
Cerrar formularios FunBit OOP 2 09-09-2005 12:31:59
Cerrar dos formularios creados dinamicamente (al mismo tiempo) ctronx Varios 7 02-09-2004 01:19:04
pasado tiempo sin acciones lanzar exe rolando_sd Varios 5 26-08-2003 00:12:49


La franja horaria es GMT +2. Ahora son las 23:29:11.


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