FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Formulario con ProgressBar cierra al principal
Buenas a todos,
Tengo una aplicación con un TreeView el cual se carga desde un archivo. Mientras se carga el archivo se abre un formulario que tiene una barra de progreso que se va incrementando. El formulario de la barra de progreso lo abro en no modal para que se pueda ir ejecutando el código del formulario principal. El tema es que esa misma barra de progreso la uso para cuando se hace click sobre alguno de los nodos del TreeView y se carga un ListView que está también en el formulario principal. Ahora es donde viene el problema. Lo que sucede es que se ve como la barra de progreso se muestra y se actualiza, el Listview se carga perfecto pero al terminar la carga el formulario principal es como que se pone por detrás de todo lo que se tenga abierto (puede ser el entorno de Delphi) Les pongo algo de código de como llamo al formulario con la barra de progreso al hacer click en un nodo y se carga el ListView.
Esto es todo. Espero que se entienda y sino es así me lo hacen saber. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#2
|
||||
|
||||
Yo uso diversos formularios compartidos con barras de progreso y siempre los libero con free. O bien directamente, o bien a través de un procedimiento finalizar del propio formulario en el que se realizan otras tareas necesarias antes del free.
|
#3
|
|||
|
|||
kuan-yiu yo en los proyectos que trabajado en distintas empresas siempre los liberaban con Release. Siempre me dijeron que es mejor que Free en alguna forma.
Dejo la web de Embarcadro donde esta esto. https://docwiki.embarcadero.com/Libr...omForm.Release ¿Igualmente eso tiene que ver en algo con lo que consulto?
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#4
|
|||
|
|||
Cita:
Para solucionar este problema, se puede cerrar el formulario de la barra de progreso después de cargar el ListView. Para hacer esto, se puede llamar al método Close() del formulario de la barra de progreso después de cargar el ListView. Además, se puede cambiar el modo en que se abre el formulario de la barra de progreso a modal para evitar que el usuario interactúe con el formulario principal mientras se carga el ListView. Aquí hay un ejemplo de cómo se puede modificar el código para cerrar el formulario de la barra de progreso después de cargar el ListView y abrir el formulario de la barra de progreso en modo modal:
En este ejemplo, se llama al método ShowModal() en lugar de Show() para abrir el formulario de la barra de progreso en modo modal. Después de cargar el ListView, se llama al método Close() del formulario de la barra de progreso para cerrarlo. Última edición por Casimiro Notevi fecha: 27-07-2023 a las 10:46:31. Razón: Poner etiquetas [delphi] [/delphi] al código. |
#5
|
|||
|
|||
Delphi01, si perdón copie el texto cuando estaba haciendo una prueba por algo que encontré en otro mensaje del foro, pero que no funcionó. En donde dices si va Show() y con este es con el que pasa lo que comenté.
Con el Close() que dices hace el mismo problema, con la diferencia de que si levanto el formulario principal el mismo queda bloqueado y no se puede hacer nada. Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#6
|
|||
|
|||
Delphi01, perdón entendí mal tu comentario.
Te cuento si pones ShowModal() en vez de Show() lo que haces es que lo que está en el formulario principal no se ejecute, ya que hasta que no se cierra el formulario de la barra no se puede ejecutar otra cosa. Así es como funciona ShowModal() no permite hacer otra cosa en la aplicación si no se tiene en el propio formulario abierto, cosa que no es lógico porque tendría que tener un formulario de progreso por cada otro formulario donde lo necesite. Con Close() tampoco es la solución porque al cerrarse el formulario de la barra todo lo que quieras hacer en el principal queda bloqueado. Esto que comento no es que me pase a mi solo, lo he vistos en muchos otros desarrollos y nunca lo solucionaron como corresponde. Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno Última edición por elrayo76 fecha: 30-07-2023 a las 00:13:32. Razón: Se corrigen las líneas en blanco que se agregan al guardar desde Firefox desde siempre |
#7
|
|||
|
|||
Cita:
Tambien pudes utilizar threads (hilos), es una solución. Saludos. |
#8
|
|||
|
|||
Buenas, si eso de threads podría ser pero por lo que es la aplicación no quiero complicarla mas. Igualmente ya buscando nuevamente por otros foros encontré la solución, que paso a contarles y es muy simple.
Luego de llamar al Release() para cerrar el formulario de la barra de progreso llamo al BringToFront() del formulario principal. Esto hace que el formulario nunca que de por detrás o minimizado luego de cerrar el otro que se llama con Show(). Gracias a todos por responder y espero que a alguien mas le pueda ser de utilidad. Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno Última edición por elrayo76 fecha: 30-07-2023 a las 00:43:52. Razón: Se corrigen las líneas en blanco que se agregan al guardar desde Firefox desde siempre |
#9
|
|||
|
|||
Cita:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
No cierra un formulario | lbidi | Varios | 7 | 09-03-2012 18:39:11 |
Determinar en un Form Principal cuando se Cierra un Form Hijo | Efren2006 | OOP | 5 | 26-02-2009 21:08:35 |
Actualizar ProgressBar de un formulario desde DataModule | Jesús Pena | Varios | 2 | 13-04-2007 02:27:13 |
Formulario modal, se cierra | ElDioni | Varios | 2 | 24-10-2005 21:19:08 |
Formulario con dos ProgressBar | Javi2 | Varios | 1 | 06-09-2004 19:26:43 |
|