PDA

Ver la Versión Completa : Envio de email con ProgressBar


MaMu
28-04-2008, 03:17:15
Estuve buscando y buscando por el foro, y no he encontrado nada que se refiera al envio de emails con progressbar con archivos adjuntos.
He notado que el IdSMTP, tiene estos eventos:


procedure TGaleria.IdSMTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Integer);

procedure TGaleria.IdSMTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Integer);

procedure TGaleria.IdSMTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);


Podrían servirme para incrementar un progressbar a medida que se envia el archivo adjunto?. En mi caso, siempre se envia un solo archivo adjunto (ZIP).

Saludos

MaMu
28-04-2008, 04:58:15
Encontré esto en:
http://www.icodeteam.net/index2.php?option=com_content&do_pdf=1&id=25


Message Sent notification



You will notice
that nothing happens after you’ve sent a message. It is possible to greatly
improve this by adding a progress bar that indicates that the message has been
sent. Use IdSMTP’s onwork, workbegin and onworkEnd event handlers, together
with the progressbar. When the work is finished you could bring up a dialog
saying “Message Sent” or something to that effect. This will assure the user
that something is happening.


El problema es que, haga lo que haga, siempre tira un Access violation.
Por ejemplo, haciendo un:


ProgressBar1.StepIt;


Ya me quedo sin ideas.

Saludos

MaMu
28-04-2008, 05:19:51
Lo que se me ocurrió hacer, es lo siguiente:


procedure TGaleria.IdSMTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Integer);
begin
if AWorkMode = wmWrite then
begin
ProgressBar1.Max := AWorkCountMax ;
ProgressBar1.Position := 0 ;
end;
end;

procedure TGaleria.IdSMTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Integer);
begin
if AWorkMode = wmWrite then
begin
ProgressBar1.Position := AWorkCount;
Label1.Caption := IntToStr(AWorkCount) + 'Bytes de :' + inttostr(ProgressBar1.Max) ;
end;
end;

procedure TGaleria.IdSMTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
if AWorkMode = wmWrite then
begin
ProgressBar1.Position := 0;
end;
end;


Pero bueno, sigo depurando porque no se donde esta el error.

MaMu
28-04-2008, 05:35:27
Ahora si que ya me chingó, elimino todos los procedimientos (OnWork, etc etc) y dejando solo esto:


procedure TGaleria.IdSMTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Integer);
begin
//es un comentario
end;


me tira error Access violation, aun siendo un comentario, que está pasando?
si dejo los procedimientos vacios, sin codigo alguno, me anda perfecto, pero claro, no puedo controlar la prograssbar.

Porque?