请问一个一直无法搞定的问题。(高手觉得简单)(10分)

  • 主题发起人 主题发起人 kidee
  • 开始时间 开始时间
K

kidee

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样捕捉tidMSTP发送邮件(带附件)时的准确进度,并在progressbar上显示出来,就象foxmail收发邮件时一样?我发觉在执行tidSMTP.send()时,如果我的附件较大,则程序长时间停止响应,所以我想用进度条来显示进度。非常感谢指教。10分。
 
在你收信动作前面加一句:
application.ProcessMessages;
 
我曾经的一段程序,希望对你有帮助
//--------------------在StatusBar中显示ProgressBar--------------------//

//取得StatusBar的Rect
procedure TMainFrm.StatusBarDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
fStatusDrawRect := Rect;
end;

//显示进度条
//muhx 20040418 am
procedure TMainFrm.ShowWait(aMax, aMin, aPos: integer; S: string);
begin
if not Assigned(fProgress) then //Assigned returns False if P is nil, True otherwise.
begin
try
fProgress := TProgressBar.Create(MainFrm);
fPanelWidth := StatusBar.Panels.Items[2].Width;
StatusBar.Panels.Items[2].Width := 250;
StatusBar.Repaint;
Application.ProcessMessages;
with fProgress do
begin
Parent := StatusBar;
Top := fStatusDrawRect.Top;
Left := fStatusDrawRect.Left;
Width := fStatusDrawRect.Right - fStatusDrawRect.Left;
Height := fStatusDrawRect.Bottom - fStatusDrawRect.Top;
min := aMin;
max := aMax;
Visible := True;
end;
except
fProgress.Free;
fProgress := nil;
end;
end;

try
with fProgress do
begin
if aPos < Max then
begin
Visible := True;
Position := aPos;
StatusBar.Panels.Items[1].Text := s;
StatusBar.Repaint;
Application.ProcessMessages;
end
else
begin
StatusBar.Panels.Items[2].Width := fPanelWidth;
Free;
fProgress := nil;
end;
end;
except
fProgress.Free;
fProgress := nil;
end;
end;

//释放进度条
//muhx 20040418 am
procedure TMainFrm.FreeWait;
begin
if Assigned(fProgress) then
fProgress := nil;
end;
 
后退
顶部