Ver Mensaje Individual
  #1  
Antiguo 14-05-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
TThread y cerrar una ventana previamente abierta

Hola compañeros !

Al final, por más que lo intento no lo consigo, y solicito de vuestra ayuda.

Estoy intentando mandar correos electrónicos mediante un Thread.

Todo funciona en principio bien. Tengo una duda que no puedo resolver.

En mi pantalla de edición del correo, al darle al botón de enviar, ejecuto :
Código Delphi [-]
MainForm.ShowMailProcess;
que a su vez llama al siguiente proceso del MainForm que contiene además :
Código Delphi [-]
unit Main;
...
type
  TMainform = class(TForm)
  ...
  private
    { Private declarations }
    MainMail  : TMainFormMail;
  ...

  TEMails = class(TThread)
  protected
    procedure Execute; override;
  end;
 
var
  Mainform : TMainform;
  EMails   : TEmails;
 
implementation
...
 
procedure TMainForm.ShowMailProcess;
begin

  MainMail := TMainFormMail.Create(Self);
  MainMail.Show;

  EMails := TEMails.Create(False);
  EMails.FreeOnTerminate := True;

end;
 
procedure TEMails.Execute;
begin
  try
    while not Terminated do begin
      ...
      if DM0.IBDataSetEMails.Eof then begin
        MainForm.MainMail.Free;
        Terminate;
      end
      else begin
        ...
        MainForm.MainMail.Send_EMail;
        ...
      end;
    end;
  except
    on E: Exception do begin
      MainForm.Label1.Caption := E.Message;
    end;
  end;
end;

En resumidas cuentas : Al darle al botón de enviar correo, creo un form adicional (MainMail) que me va a mostrar el proceso del envío. Después de crear este form, creo el Thread de tal manera que se ejecute inmediatamente.

El Thread entra en un bucle que comprueba todos los correos que tiene que enviar. Una vez que no queden correos por enviar, quiero finalizar tanto el Thread como además cerrar y liberar la ventana creada para mostrar el proceso de envío.

Pero al intentar cerrar la ventana MainForm.MainMail.Free me salta un error : 'System Error. Code : 5'.

No sé como hacerlo para que libera la ventana que muestra el proceso y termine el thread.

Muchas gracias por vuestra ayuda
__________________
Piensa siempre en positivo !
Responder Con Cita