Ver Mensaje Individual
  #4  
Antiguo 25-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita