操作耗时过长的数据库操作(如Backup Database),给用户显示正在数据库操作中,使用以下过程:
procedure TMainForm.ShowProgressBar(const Msg: string);
begin
  MsgHint := Msg + '...';
  Animate1.Active := True;
  Screen.Cursor := crSQLWait;  
end;
procedure TMainForm.ClearProgressBar;
begin
  FStopProgressStep := True;
  MsgHint := '';
  Screen.Cursor := crDefault;
  Animate1.Active := False;
end;
ShowProgressBar在执行SQL前操作,ClearProgressBar在执行完毕后操作;
但是用户提出希望显示ProgressBar,而不是TAnimate;能够达到进度条如下代码的操作
  ProgressBar.Show;
  while ProgressBar.Visible do
  begin
    ProgressBar.StepIt;
    Application.ProcessMessages;
    Sleep(ProgressBar.Position);
  end;
但是试过加入以上代码后,根本就始终循环,跳不出来,请问
1。如何使用线程呢?如果建立ProgrssBarView显示进度的线程。
而我在程序代码中把执行SQL当作主线程中,中间由于可能有提示模态对话框,这样如何仍保持通讯呢?
2。怎样达到TAnimate的效果呢?

解决方案 »

  1.   

    上面的代码本来就是个死循环啊,你又没将ProgressBar.Visible 设为False
      

  2.   

    C_Sharp(www.borlan.net) :如果提供以下类似
     procedure DataSetFetchProgress(DataSet: TCustomADODataSet; Progress,MaxProgress: Integer; var EventStatus: TEventStatus);事件函数能够加入代码:
      ProgressBar.Show;
      while ProgressBar.Visible do
      begin
        ProgressBar.StepIt;
        Application.ProcessMessages;
        Sleep(ProgressBar.Position);
      end;
    但是。
      

  3.   

    请参看
       http://www.csdn.net/expert/topic/691/691207.xml