FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#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 |
|
|
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 |
|