Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 3 Semanas
oscjae oscjae is offline
Miembro
 
Registrado: may 2005
Posts: 77
Poder: 20
oscjae Va por buen camino
Saber cuando se destruye un formulario

Buenos días, tengo una pregunta rápida, hay alguna forma de saber si un formulario se ha cerrado?, para poder ejecutar la apertura de otro, pero necesito que el formulario primero se haya cerrado, se haya destruido, para poder abrir el segundo.
Gracias!!!
Responder Con Cita
  #2  
Antiguo Hace 3 Semanas
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.874
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 oscjae Ver Mensaje
hay alguna forma de saber si un formulario se ha cerrado?, para poder ejecutar la apertura de otro, pero necesito que el formulario primero se haya cerrado, se haya destruido, para poder abrir el segundo.
En el formulario tienes los eventos OnClose, OnCloseQuery y OnDestroy donde puedes poner el código que necesites para controlar eso.
Puedes capturar el evento OnDestroy para saber justo lo que estás pidiendo, saber cuando se está destruyendo eso form.
__________________
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
  #3  
Antiguo Hace 3 Semanas
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.874
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
Con un código como este puedes capturar el evento OnDestroy.

Código Delphi [-]
...
type
  TFormMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure SeDestruyeForm(Sender:TObject);
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

uses unit2;

procedure TFormMain.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Application);
  Form2.OnDestroy := SeDestruyeForm;
  Form2.Show;
end;

procedure TFormMain.SeDestruyeForm(Sender: TObject);
begin
  ShowMessage(Format('Se ha destruido el formulario <%s>',[TForm(Sender).Name]));
end;

En el OnClose del segundo formularuio debes poner que se destruya.
__________________
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 Hace 3 Semanas
oscjae oscjae is offline
Miembro
 
Registrado: may 2005
Posts: 77
Poder: 20
oscjae Va por buen camino
Gracias por contestar, es un poco mas complicado, te pongo en situación, tengo un formulario desde el que llamo a otro, es un tema de fastreport, en ese formulario (Form2) recién creado tiene un componente frxDesigner que se utiliza para diseñar un informe, con sus eventos, SaveReport, etc... que capturo y tengo cierto código, cuando cierro ese formulario abro otro (Form3), que también tiene ese componente frxDesigner, y lo mismo que el anterior tiene sus eventos, el problema está que cuando se abre el tercer formulario esta cogiendo la instancia del componente del segundo formulario, y no pasa por los eventos del componente del propio formulario, espero estar explicándome bien, por eso necesito saber cuando se ha destruido "Form2" para poder crear "Form3"

Por cierto, el "form2" es ShowModal

Desde el "form1"....

Código Delphi [-]
procedure TForm1.CreateForm2;
begin
  Form2:=TForm2.Create;
  Form2.ShowModal;

  Form3:=TForm3.Create
  Form3.Show;
end;

Lo he solucionado con "Notifications", he creado en el Form1 ...

Código Delphi [-]
 

procedure Notification(AComponent: TComponent;  Operation: TOperation);override; 

...

procedure TForm1.Notification(AComponent: TComponent; Operation: TOperation);
begin
  if (Operation = opRemove) and (AComponent is TForm2) then
    CrearForm3;

end;

Me aseguro de que el formulario se ha eliminado y creo el "form3", y funciona, no se si habrá otra forma mas elegante, jeje
O si ves algún posible problema por utilizar ese método.

Gracias.
Responder Con Cita
  #5  
Antiguo Hace 3 Semanas
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.874
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 oscjae Ver Mensaje
...el problema está que cuando se abre el tercer formulario esta cogiendo la instancia del componente del segundo formulario, y no pasa por los eventos del componente del propio formulario,
Creo que independientemente de que lo hayas solucionado con notificaciones (como dices), lo grave y lo que tal vez te está indicando que tienes un problema de diseño es esto que te pasa.
No debería pasar (si las cosas se hacen correctamente) que un formulario "esté cogiendo la instancia de otro" (no entiendo muy bien qué quiere decir eso).

Yo me preocuparía, no porque se haya arreglado, sino porqué te pasaba eso.
__________________
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
  #6  
Antiguo Hace 3 Semanas
oscjae oscjae is offline
Miembro
 
Registrado: may 2005
Posts: 77
Poder: 20
oscjae Va por buen camino
Quizas me he expresado mal con lo de la instancia, en el "Form2" creé un destructor, y le puse un punto de ruptura, en un momento dado, en el Form2 hago un close, y la creación del Form3 ocurre antes de que salte el Destroy del "Form2", el close del Form2 tiene un
Código Delphi [-]
action:=caFree
, el problema es que antes de que se destruya el Form2 se esta creando el Form3, y en la documentación del FastReport dice que para el diseño, solo hace falta soltar el componente en el proyecto, y siempre que se llame a "DesignReport" internamente enlazará ese componente.
Hice una prueba de quitar el componente del Form2 y funcionó bien, así que el problema estaba en que algo estaba pasando con el componente del Form2, no se como FastReport hace ese enlace internamente.

Imagino que cuando haces Close, hay una pila de llamadas que tardan en procesarse, y la destrucción del Form2 no se ha procesado cuando se crea el Form3, por eso lo de "Notification".
Responder Con Cita
  #7  
Antiguo Hace 3 Semanas
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.874
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
Si quieres pon un ejemplo pequeño donde se reproduzca el problema y lo revisamos.
__________________
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 Hace 3 Semanas
oscjae oscjae is offline
Miembro
 
Registrado: may 2005
Posts: 77
Poder: 20
oscjae Va por buen camino
En cuanto pueda pongo un ejemplo y lo vemos.
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
Cuando abro el programa no me aparece el formulario Raven juice Varios 12 28-05-2015 18:24:56
saber cuando le asigno un valor a un campo de formulario jsc HTML, Javascript y otros 3 26-12-2012 22:08:13
Como ocultar el formulario cuando se usa free Lizette Varios 4 03-02-2009 15:24:44
Saber cuando ingresan a tu PC genius Varios 4 11-12-2006 14:47:52
No se destruye mi aplicacion javicho_villa Varios 3 26-01-2006 17:26:32


La franja horaria es GMT +2. Ahora son las 09:58:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi