Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-07-2022
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
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:
Código Delphi [-]
 
FVerificacion := TFVerificacion.Create(Self);
FVerificacion.Parent := PNCentral;
FVerificacion.Align := alClient;
FVerificacion.Show;

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.
Responder Con Cita
  #2  
Antiguo 27-07-2022
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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:

Código Delphi [-]
Action := caFree;

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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 27-07-2022 a las 08:46:03.
Responder Con Cita
  #3  
Antiguo 27-07-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #4  
Antiguo 27-07-2022
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por dec Ver Mensaje
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:

Código Delphi [-]
Action := caFree;

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.
Esto no funcionó....


Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
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.
Hola, Gracias por Responder....
Efectivamente intente replicarlo y no hace el problema , parece que es el proyecto en si, (Puede pasar porque el programa es muy visual? con muchos recursos esteticos y eso?)
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.
Responder Con Cita
  #5  
Antiguo 27-07-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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?
Responder Con Cita
  #6  
Antiguo 27-07-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Además del Action := caFree en el OnClose, quizás deberías limpiar la variable que apunta al formulario.

Código Delphi [-]
FVerificacion := TFVerificacion.Create(Self);
FVerificacion.Parent := PNCentral;
FVerificacion.Align := alClient;
FVerificacion.Show;
FVerificacion := nil; // Esta variable podría estar apuntando a un formulario ya liberado.

Yo lo que haría es:
Código Delphi [-]
with TFVerificacion.Create(Self) do
begin
   Parent := PNCentral;
   Align := alClient;
   Show;
end;
Esto evita tener que definir una variable y luego tener que acordarte de liberarla.
Responder Con Cita
  #7  
Antiguo 28-07-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Edwardfeliz Ver Mensaje
...se abre solo el formulario de verificación, y desaparece incluso el otro formulario que habia abierto en el panel,
=> Verificación, entiendo que es el de Usuario/Contraseña
=> 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.
Responder Con Cita
  #8  
Antiguo 30-07-2022
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
=> Verificación, entiendo que es el de Usuario/Contraseña
=> 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...
Entiendo tu planteamiento y analisis, Gracias por las ideas, probare con calma y dejo saber cualquier descubrimiento.
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
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


La franja horaria es GMT +2. Ahora son las 18:51:35.


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