我的程序在进行数据统计的时候有点慢,我想做一个等待窗口,在数据统计完后,窗口自动消失,应该怎么做?

解决方案 »

  1.   

    var
      FormWait: TFormWait;
      WindowList:Pointer;procedure ShowFormWait(AOwner:TComponent);
    //2003.02.26
    begin
      if not Assigned(FormWait) then begin
        FormWait:=TFormWait.Create(AOwner);
      end;
      WindowList:=DisableTaskWindows(FormWait.Handle);
      FormWait.Show;
      FormWait.Update;
    end;procedure HideFormWait();
    //2003.02.26
    begin
      if Assigned(FormWait) then begin
        EnableTaskWindows(WindowList);
        FreeAndNil(FormWait);
      end;
    end;procedure InitFormWait(MusicName:WideString);
    //2003.03.24
    begin
      if Assigned(FormWait) then begin
        FormWait.LabelMusic.Caption:='Saving ['+MusicName+']';
        FormWait.Update;
      end;
    end;procedure ProgressFormWait(Value:Integer);
    //2003.03.24
    begin
      if Assigned(FormWait) then begin
        FormWait.ProgressBar1.Position:=Value;
      end;
    end;//**************usage***************  try
          ShowFormWait(AOwner);
          DoSaveMusic(MusicInfo);
      finally
        HideFormWait();
       end;procedure TMLDataModule.DoSaveMusic(FileStream:TTntFileStream;DBStream:TStream);
    //save music data from file into database
    const
      MAXBUFSIZE=500000;
    var
      BufferSize:Integer;
    begin
      FileStream.Position:=0;
      DBStream.Position:=0;
      BufferSize:=MAXBUFSIZE;
      Application.MainForm.Update;
      if BufferSize>FileStream.Size then begin
        BufferSize:=FileStream.Size;
      end;
      while BufferSize>0 do begin
        DBStream.CopyFrom(FileStream,BufferSize);
        ProgressFormWait(FileStream.Position*100 div FileStream.Size);
        Application.ProcessMessages;
        BufferSize:=MAXBUFSIZE;
        if BufferSize>FileStream.Size-FileStream.Position then begin
          BufferSize:=FileStream.Size-FileStream.Position;
        end;
      end;
    end;
      

  2.   

    如果的确需要较长时间的话还是用多线程吧!不要让客户等得太烦了给你Close了哦,我就遇到过这种情况