2009-09-19 3 views
0

폴더의 모든 파일을 압축하는 데모 코드를 사용하고 있습니다. 그러나 진행률 표시 줄에는 총 진행률이 아닌 모든 파일의 진행률이 표시됩니다.기존 Delphi 코드의 진행률 막대를 쉽게 수정할 수 있습니까?

진행률 표시 줄에 모든 파일 하나 하나에 대한 진행률이 아닌 진행률이 표시되도록 코드를 수정하는 쉬운 방법이 있습니까?

procedure DoProgress(Sender: TObject; Position, Total: Integer); 
procedure DoCompressFile(Sender: TObject; const Filename: string); 

....

procedure TJvZLibMultipleMainForm.DoCompressFile(Sender:TObject;const Filename:string); 
begin 
    lblFilename.Caption := Filename; 
    Update; 
end; 

    procedure TJvZLibMultipleMainForm.btnCompressClick(Sender: TObject); 
var 
    z : TJvZlibMultiple; 
begin 
    ForceDirectories(ExtractFilePath(edFilename.Text)); 
    z := TJvZlibMultiple.Create(nil); 
    Screen.Cursor := crHourGlass; 
    try 
    lblFilename.Caption := ''; 
    pbProgress.Position := 0; 
    z.OnProgress := DoProgress; 
    z.OnCompressingFile := DoCompressFile; 
    z.CompressDirectory(edSrcFolder.Text,true,edFilename.Text); 
    finally 
    z.Free; 
    Screen.Cursor := crDefault; 
    end; 
    pbProgress.Position := 0; 
    lblFilename.Caption := 'Ready'; 
end; 


procedure TJvZLibMultipleMainForm.DoProgress(Sender: TObject; Position, Total: Integer); 
begin 
    pbProgress.Max := Total; 
    pbProgress.Position := Position; 
    Update; 
end; 
+0

TJvZlibMultiple.CompressDirectory의 구현에 따라 달라집니다. 출처 나 문서를보고 원하는 것을 할 수있는 방법이 있는지 확인하십시오. – jpfollenius

+2

각 파일의 소요 시간에 따라 사용자는 두 개의 진행률 표시 줄을 볼 수 있습니다. 여기서 구현 한 내용을 그대로 유지하고 완료된 각 파일을 증가시켜 전체 진행률을 보여주는 진행률 막대를 추가 할 수 있습니다. – Argalatyr

답변

0

또는 더 나은 방법은 전체 크기에 파일 크기를 더하고 위치를 처리 할 바이트 수만큼 증가시키는 것입니다.

0

간단한 방법은 FindFirst에와 Findnext있는 디렉토리에있는 파일을 계산하는 것, 그 다음에 pbProgress.Max를 설정하고 다음에 1 pcProgress.Position를 증가 DoCompressFile.

관련 문제