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 21-01-2010
Avatar de Red_Leon
Red_Leon Red_Leon is offline
Miembro
 
Registrado: oct 2007
Ubicación: Castilla la Mancha
Posts: 27
Poder: 0
Red_Leon Va por buen camino
Cerrar Formulario

Hola a todos,

Tengo un problema en aplicación que no se si será general o no a ver si me podeis echar una mano:

Es una aplicación de escritorio realizada con Delphi 7 de lo más corriente, en los tiempos de carga (que algunos son elevados), muestro un formulario de espera (de forma normal, .show) con la propiedad FormStyle:=fsStayOnTop y una barra de progreso que se incrementa con un Timer.

Cuando se finaliza el proceso cierro el formulario con FormularioEspera.close.

Si la aplicación ha sido minimizada o ha perdido el foco y en ese tiempo se le manda cerrar el formulario, no se cierra y luego es imposible cerrar el formulario manualmente.

He probado con .close .hide .visible:=false y no lo consigo.

Ocurre tanto en XP, Vista y W7 ¿Alguna idea?

Gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 21-01-2010
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola Red_Leon, todo dependerá si mientras está visble la ventana de espera deseas hacer algo o no.

Si no tienes que hacer nada (solo esperar a que acabe), llámala en modo [/b]ShowModal[/b] y que sea la propia ventana la que se cierre:
- En el evento OnActivate llamas a la función que ejecute lo que desees.
- Al final de la función pones ModalResult := mrOk, para que devuelva la atención a la ventana llamadora, y en ésta ventana la eliminas con Free
Responder Con Cita
  #3  
Antiguo 21-01-2010
Avatar de Red_Leon
Red_Leon Red_Leon is offline
Miembro
 
Registrado: oct 2007
Ubicación: Castilla la Mancha
Posts: 27
Poder: 0
Red_Leon Va por buen camino
Lo he probado y la aplicación se bloquea durante el tiempo de espera, pero se cierra.

Y he probado a meter las funciones en hilos pero entonces obtengo el mismo resultado que anteriormente.

Gracias de todas formas salvica.
Responder Con Cita
  #4  
Antiguo 21-01-2010
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Estoy suponiendo que el form de espera lo llamos desde una ventana, no desde la aplicación al modo de un SplashScreen, no?
Responder Con Cita
  #5  
Antiguo 21-01-2010
Avatar de Red_Leon
Red_Leon Red_Leon is offline
Miembro
 
Registrado: oct 2007
Ubicación: Castilla la Mancha
Posts: 27
Poder: 0
Red_Leon Va por buen camino
Se llama desde una ventana, pero si a modo de SplashScreen.

Se utiliza al presentar un informe, la carga de este formulario y un informe de grandes dimensiones puede tardar entre 20 y 30 seg.
Entonces llamo al formulario de Espera, y despues ejecuto la función del informe, para que no se quede bloqueado llamo a Application.ProccessMessage, cuando termina la función del informe llamo a cerrar el Formulario y si la aplicación no tiene el foco de windows (estado minimizado o otra aplicación delante) el Formulario Espera no se cierra, si lo conserva se cierra.
Responder Con Cita
  #6  
Antiguo 21-01-2010
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por Red_Leon Ver Mensaje
Se llama desde una ventana, pero si a modo de SplashScreen.

Se utiliza al presentar un informe, la carga de este formulario y un informe de grandes dimensiones puede tardar entre 20 y 30 seg.
Entonces llamo al formulario de Espera, y despues ejecuto la función del informe, para que no se quede bloqueado llamo a Application.ProccessMessage, cuando termina la función del informe llamo a cerrar el Formulario y si la aplicación no tiene el foco de windows (estado minimizado o otra aplicación delante) el Formulario Espera no se cierra, si lo conserva se cierra.
Me parece que los tiros vienen porque hay algún componente en la ventana que no se ha cerrado.
- Prueba a poner una variable booleana global (por ejemplo CerrarVentana que inicializas a false en el evento OnCreate de la ventana de espera.
- Al finalizar tu función la cambias a true.
- Yo lo que hago es crearlas y eliminarlas cada vez que las necesito, por lo que en tu aplicación pones donde necesites:
Código:
  Application.CreateForm(TForm_Espera, Form_Espera);
  with Form_Espera do begin
       TuFuncion;
        while not CerrarVentana do
              Application.ProcessMessages;
       Hide;
       Free;
  end;
A mi no me da problemas con las SplashScreen, pero si se te sigue colgando puedes probar a poner en el evento OnClose un bucle que te elimine los objetos que tenga la ventana para comprobar cual es el que no ha cerrado completamente

Saludos
salvica
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
cerrar formulario Patricio Varios 2 04-07-2008 23:52:27
Cambiar propiedad de componente del formulario padre al cerrar el formulario hijo jzginez OOP 5 22-06-2007 21:40:51
Cerrar conexión al cerrar formulario arantzal Conexión con bases de datos 5 09-08-2006 12:43:52
Cerrar formulario en uso locojoan API de Windows 1 21-06-2006 17:08:22
Boton cerrar del formulario (X) Un abrazo OOP 2 26-05-2003 16:26:54


La franja horaria es GMT +2. Ahora son las 15:12:24.


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