نمایش میزان كپی شدن فایل با ProgressBar در دلفی

چطور میتوان زمان کپی شدن فایل را با استفاده از ProgressBar نمایش داد؟
برای انجام این کار ابتدا بر روی یک فرم یک ProgressBar اضافه کنید سپس تابع زیر را تایپ کنید:

کد:
procedure TForm1.CopyFileWithProgressBar1(Source,  Destination: string); 
var 
FromF, ToF: file of byte; 
Buffer:  array[0..4096] of char; 
NumRead: integer; 
FileLength: longint; 
begin  
AssignFile(FromF, Source); 
reset(FromF); 
AssignFile(ToF,  Destination); 
rewrite(ToF); 
FileLength := FileSize(FromF); 
with  Progressbar1 do 
begin 
Min := 0; 
Max := FileLength; 
while  FileLength > 0 do 
begin 
BlockRead(FromF, Buffer[0], SizeOf(Buffer),  NumRead); 
FileLength := FileLength - NumRead; 
BlockWrite(ToF, Buffer[0],  NumRead); 
Position := Position + NumRead; 
end; 
CloseFile(FromF);  
CloseFile(ToF); 
end; 
end;

در این تابع شما در واقع فایل مبدا را خوانده و در مقصد مینویسید. حالا یک دکمه اضافه کرده کد زیر رو اضافه نمایید:

کد:
  
procedure TForm1.Button1Click(Sender: TObject); begin CopyFileWithProgressBar1('c:\Welcome.exe', 'c:\temp\Welcome.exe'); end;

چطور می توان زمان کپی شدن فایل را محاسبه و نمایش داد؟
برای این کار نیز میتوانید از تابع زیر استفاده کنید:

کد:
   
procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string); var FromF, ToF: file of byte; Buffer: array[0..4096] of char; NumRead: integer; FileLength: longint; t1, t2: DWORD; maxi: integer; begin AssignFile(FromF, Source); reset(FromF); AssignFile(ToF, Destination); rewrite(ToF); FileLength := FileSize(FromF); with Progressbar1 do begin Min := 0; Max := FileLength; t1 := TimeGetTime; maxi := Max div 4096; while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); FileLength := FileLength - NumRead; BlockWrite(ToF, Buffer[0], NumRead); t2 := TimeGetTime; Min := Min + 1; // Show the time in Label1 label1.Caption := FormatFloat('0.00', ((t2 - t1) / min * maxi - t2 + t1) / 100); Application.ProcessMessages; Position := Position + NumRead; end; CloseFile(FromF); CloseFile(ToF); end; end;


در این تابغ ابتدا زمان اولیه در متغیر t1 ذخیره شده و سپس پس از کپی شدن هر قسمت از فایل، زمان در متغیر t2 ذخیره میشود و توسط فرمول زیر مقدار زمان باقی مانده تا کپی کامل فایل بدست می آید.


کد:
((t2 - t1) / min * maxi - t2 + t1) / 100