![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Comportamiento extraño de la aplicacion con los Dialogs
Saludos, le comento algo extraño que me está pasando,
Tengo un programa desallorado en delphi 10.4 Community edition (Solo para informar). Resulta que, en un panel, muestro algunos formularios ahí, como por ejemplo uno que se abre desde que el programa inicia, colocas una información y con un botón se cierra. Lo muestro de forma automática de la siguiente forma:
y al final me deshago de él simplemente con un "close", todo bien hasta aquí, resulta que abro otro formulario (En el mismo panel), y dentro de ese formulario, utilizo un savedialog... para guardar un archivo, luego de mostrarse la ventana y todo y guardar el archivo, se abre solo el formulario de verificación, y desaparece incluso el otro formulario que habia abierto en el panel, solo me pasa eso luego de comenzar a usar el savedialog en el programa. ![]() |
#2
|
||||
|
||||
Hola a todos,
Si te vuelve a aparecer el formulario de verificación, diría yo que debe estar relacionado con su "Parent" y con el hecho de que no liberes el formulario al cerrarlo. Podrías probar situando el siguiente código en el evento "OnClose" del formulario de verificación:
Con eso estaríamos liberando el formulario de verificación cuando se cierre, y, de este modo, no debería poderte "aparecer" de nuevo, si no lo vuelves a crear. Podrías probar con esto a ver si te soluciona el asunto... y acaso también usar el mismo código en el resto de formularios que sitúas en el panel. P.D. Dicho lo anterior, he intentado reproducir el problema y no he sido capaz, de modo que a lo mejor hay algo que se escapa y que esté causando el asunto. En todo caso prueba lo dicho anteriormente, puesto que un formulario que ha sido liberado no puede volver a mostrarse sin más. Última edición por dec fecha: 27-07-2022 a las 08:46:03. |
#3
|
||||
|
||||
En estos casos, lo más sencillo es crear un pequeño proyecto de ejemplo con un par de formularios vacíos, donde se reproduzca el problema, y adjuntarlo al mensaje (ZIP).
De esa forma es más sencillo de probar y "tocar" el proyecto.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Cita:
Cita:
Efectivamente intente replicarlo y no hace el problema ![]() lo que hice fue hacer un video del problema y subirlo a un enlace que les comparto a continuacion... https://youtu.be/XCYZjovh9qI La unica solucion Inmediata mientras descubro la causa, es luego de ejecutar el Dialog, mandar a cerrar dicho formulario de Verificacion. Con un Close. Última edición por Edwardfeliz fecha: 27-07-2022 a las 15:29:04. |
#5
|
||||
|
||||
Poco te pueden ayudar si no pones el código que usas.
Y aparte de eso ya han comentado antes que liberes el formulario, pues en el código lo creas: FVerificacion := TFVerificacion.Create(Self); ¿Pero dónde lo destruyes?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
||||
|
||||
Además del Action := caFree en el OnClose, quizás deberías limpiar la variable que apunta al formulario.
Yo lo que haría es: Esto evita tener que definir una variable y luego tener que acordarte de liberarla. |
#7
|
||||
|
||||
Cita:
=> Otro, entiendo que es el de BACKUP, ROLES, USUARIOS,... Lo único que se me ocurre es que hagas LOG de eventos importantes a ver si adivinas qué está pasando con los formularios de Visualización y el Otro. O estás cerrando el Otro (de forma involuntaria), o estás abriendo un segundo form de Visualización (que tapa el otro) o el Otro está perdiendo el padre y deja de verse... (1) Por ejemplo, graba en un log, los eventos de Create, Close, Destroy,... de todos los forms, para ver el ciclo de vida de cada uno de ellos. => Te permitirá saber si alguno se está destruyendo sin tú saberlo (o ha quedado oculto, o sin parent,..) (2) Haz un procedimiento que utilice Screen.Forms, y coloca un botón en el Main para llamarlo. De forma que en cualquier momento te permita conocer (ya sea mostrando un ShowMessage o volcando al LOG) los formularios abiertos en cada momento. => Te permitirá saber si el form Otro, realmente está destruído o es que no lo estás viendo...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#8
|
||||
|
||||
Cita:
|
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Un comportamiento extraño. | TiammatMX | Varios | 5 | 03-09-2013 22:54:07 |
Comportamiento extraño de current_timestamp | erickperez6 | Firebird e Interbase | 4 | 07-12-2011 07:42:24 |
Extraño comportamiento de ADO | r1d2m3 | Conexión con bases de datos | 3 | 12-12-2009 19:08:32 |
Comportamiento extraño del TPageControl | Chris | OOP | 4 | 02-04-2009 21:16:09 |
Comportamiento extraño de DisplayFormat | Thales | Conexión con bases de datos | 0 | 02-12-2005 21:56:32 |
![]() |
|