![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
||||
|
||||
|
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 |
|
#3
|
||||
|
||||
|
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. |
|
#4
|
||||
|
||||
|
Estoy suponiendo que el form de espera lo llamos desde una ventana, no desde la aplicación al modo de un SplashScreen, no?
|
|
#5
|
||||
|
||||
|
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. |
|
#6
|
||||
|
||||
|
Cita:
- 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;
Saludos salvica |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|