Ver Mensaje Individual
  #7  
Antiguo 30-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Código Delphi [-]
procedure TFmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IBD1.Connected := false;
  Action := cafree;
end;

Para cada ventana que se cierra, delphi comprueba si se trata del MainForm, si lo es, despues de ejecutar varios eventos, llamará a Terminate.

Tal como dice la ayuda, terminate es asincrono, por eso tarda un poquito en cerrar todo.

Una cosa es que la ventana principal desaparezca de tu vista y otra que haya terminado completamente de cerrarse todos los recursos apropiados. Puedes verlo en la Unidad Forms:

Código Delphi [-]
procedure TCustomForm.Close;
var
  CloseAction: TCloseAction;
begin
  if fsModal in FFormState then
    ModalResult := mrCancel
  else
    if CloseQuery then
    begin
      if FormStyle = fsMDIChild then
        if biMinimize in BorderIcons then
          CloseAction := caMinimize else
          CloseAction := caNone
      else
        CloseAction := caHide;
      DoClose(CloseAction);
      if CloseAction <> caNone then
        if Application.MainForm = Self then Application.Terminate
        else if CloseAction = caHide then Hide
        else if CloseAction = caMinimize then WindowState := wsMinimized
        else Release;
    end;
end;

procedure TCustomForm.DoClose(var Action: TCloseAction);
begin
  if Assigned(FOnClose) then FOnClose(Self, Action); 
 ahora se pone tu base de datos en false
end;

Como ves, el evento OnClose tiene más "cosas que hacer" además de tu código. Al abrir rapidamente el programa, puede que aún no haya cerrado la base de datos, y por eso te dé el fallo.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita