Delphi带进度条复制文件

function FileCopy(SourceFile,TargetFile : string;ProgressBar :TRzProgressStatus ) : boolean;

//function FileCopy(SourceFile,TargetFile : string;ProgressBar :TProgressBar ) : boolean;

var

getStream,setStream: TFileStream;

num, n: Integer;

buf: PByte;

BufSize,block: Integer;

begin

result := false;

if not FileExists(SourceFile) then

begin

//ShowMessage('源文件不存在!');

Exit;

end;

getStream := TFileStream.Create(SourceFile, fmOpenRead or fmShareExclusive);

setStream := TFileStream.Create(TargetFile, fmCreate);

num := getStream.Size;

setStream.Size := num;

getStream.Position := 0;

setStream.Position := 0;

BufSize := num;

block := BufSize div 100;

GetMem(buf, BufSize);

// ProgressBar.Max := 100;

ProgressBar.Percent := 0;

//ProgressBar.min := 0;

//ProgressBar.Position := 0;

while num <> 0 do

begin

Application.ProcessMessages;

n := block;

if n > num then n := num;

getStream.ReadBuffer(buf^, n);

setStream.WriteBuffer(buf^, n);

ProgressBar.Percent := Trunc((1 - num / BufSize)*100);

//ProgressBar.Position := Trunc((1 - num / BufSize)*100);

Dec(num, n);

end;

ProgressBar.Percent := 0;

//ProgressBar.Position := 0;

FreeMem(buf, BufSize);

getStream.Free;

setStream.Free;

result := true;

end;