Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как повесить Progressbar на отправку эл. письма (как в TheBat).

9.0K
24 октября 2007 года
mr_smit
64 / / 03.12.2006
Отправляю письмо с помощью стандартного компонента idSMTP с палитры Indy Clients. Так вот как визуализировать процесс отправки с помощью ProgressBar (или Gauge), т.е. всего ххх КБ, отправлено хх КБ. Ну думаю понятно. Кому интересно, вот код:

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  SMTP.Host:='smtp.bk.ru'; // адресс почтового сервера
  SMTP.Port:=25;    // порт по которому будет осуществляться подключение
  SMTP.Username:='ххххххх';  // логин пользователя
  SMTP.Password:='ххххххх';     // пароль пользователя
  SMTP.AuthenticationType:=atLogin;
 with IdMessage do
     begin
      Body.Assign(Memo1.Lines);
      From.Text := 'хххххх@bk.ru';
      Recipients.EMailAddresses := 'хххххх@yandex.ru'; //кому
      Subject := 'CODENET';  //тема письма
      end;
   SMTP.Connect;
   try
  SMTP.Send(IdMessage);
   finally
      SMTP.Disconnect;
        showmessage('Отправлено');
   end;
end;


Можно в событии OnStatus компонента idSMTP написать:

 
Код:
Memo2.Lines.Insert(0,'Статус отправки: '+AStatusText);


и тогда в memo2 будет "текстовая визуализация" процесса отправки письма, но она не информативна.
9.0K
29 октября 2007 года
mr_smit
64 / / 03.12.2006
Всё, разобрался.

Код:
procedure TForm1.SMTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
var S: TMemoryStream;
begin
if AWorkMode <> wmWrite then Exit;
  S := TMemoryStream.Create;
  try
    // получаем размер всего сообщения
    IdMessage.SaveToStream(S, False);
    ProgressBar1.Min := 0;
    ProgressBar1.Position := 0;
    ProgressBar1.Max := S.Size;
    // вычитаем заголовок
    S.Clear;
    IdMessage.SaveToStream(S, True);
    ProgressBar1.Max := ProgressBar1.Max - S.Size;
  finally
    S.Free;
  end;

end;

procedure TForm1.SMTPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
if AWorkMode = wmWrite then ProgressBar1.Position := AWorkCount;
end;

procedure TForm1.SMTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
if AWorkMode = wmWrite then ProgressBar1.Position := 0;
end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог