Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Determinar en un Form Principal cuando se Cierra un Form Hijo (https://www.clubdelphi.com/foros/showthread.php?t=63600)

Efren2006 21-02-2009 21:02:48

Determinar en un Form Principal cuando se Cierra un Form Hijo
 
Mi problema es el Siguiente

Tengo una aplicacion que puede llamara varios formularios a travez de un menu,Toolabar,etc, Pero necesito determinar en el formulario Principal cuando se cierra el ultimo Formulario para efectuar una operacion.

No quiesiera hacer un Timer y chequear cuantas ventanas estan activas en este momento.

Existen alguna forma de hacer esto a travez de un Evento ??

Gracias de antemano.

caifan_0883 24-02-2009 02:49:23

mmm. mira asi como tu describes yo utilizaria.

En mi form principal en la propiedad FormStyle que sea fsMDIForm, y las demas forms que sean fsMDIChild.

asi no recurririas a otras cosas.

Saludos!!

Efren2006 25-02-2009 17:00:42

Gracias por tu tiempo

El problema realmente es que necesito realizar una (Funcion y/o Procedimiento) en mi Form Principal cuando se halla cerrado la ultima ventana abierta por el usurio

Saludos

roman 25-02-2009 21:54:07

Puede haber varias maneras de hacer esto dependiendo del contexto exacto: ¿todos los formularios son del mismo tipo o tienen un ancestro común? Cuando se cierran los formularios, ¿se destruyen o sólo se esconden? ¿Son formularios MDIChild?

En fin, suponiendo que tú tienes control del momento en que se crean los formularios (es decir, que no se crean automáticamente al inicio) y que los destruyes al cerrarlos (poniendo Action := caFree en su evento OnClose), puedes valerte del método Notification del formulario principal para actualizar la cuenta:

Código Delphi [-]
type
  TMainForm = class(TForm)
  private
    FormCount: Integer; // cuenta de los formularios abiertos

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

implementation

procedure TMainForm.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;

  if (AComponent is TForm) and (AComponent.Owner = Self) and (Operation = opRemove) then
  begin
    Dec(FormCount);

    if (FormCount = 0) then
    begin
      {
        Aquí lo que desees hacer cuando se hayan cerrado
        todos los formularios.
      }
      ShowMessage('No more forms');
    end;
  end
end;

Al crear un formulario es necesario poner al principal como Owner y aumentar la cuenta de formularios:

Código Delphi [-]
with TFormularioHijo.Create(Self) do
  Show;

Inc(FormCount);

// Saludos

Efren2006 25-02-2009 23:57:43

Roman

Exactamente lo que necesitaba, :)

Un millon de Gracias

caifan_0883 26-02-2009 20:08:35

woow, ni se me habia ocurrido ese dato. Lo checare se ve interesante.

Saludos!!


La franja horaria es GMT +2. Ahora son las 12:49:32.

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