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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #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
Poder: 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
  #2  
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
Poder: 21
gluglu Va por buen camino
Como siempre pasa en estas ocasiones, después de tantas horas probando, y justo después de decidirme a abrir un hilo con mi problema, te viene la idea y la solución :

Código Delphi [-]
procedure TEMails.Execute;
begin
 
  try
    while not Terminated do begin
      if DM0.IBDataSetEMails.Eof then
        Terminate
      end
      else begin
        ...
 
procedure TMainForm.ShowMailProcess;
begin

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

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

end;

procedure TMainForm.TerminateEMail(Sender: TObject);
begin
  MainMail.Free;
end;

Espero que le pueda servir el código a alguien más.

Saludos a todos
__________________
Piensa siempre en positivo !
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
Cerrar ventana rex HTML, Javascript y otros 2 29-05-2006 12:16:42
Problemas MDI cerrar ventana rafadrover Varios 3 28-01-2006 13:30:44
Enviar texto a la ventana abierta Mr.Vaka Varios 4 28-11-2005 18:57:31
Cerrar ventana a los 10 min. de inactividad jamonete2 OOP 4 10-06-2005 18:18:53
Cerrar Ventana ronson OOP 2 17-12-2004 12:38:04


La franja horaria es GMT +2. Ahora son las 14:09:04.


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
Copyright 1996-2007 Club Delphi