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

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

کد PHP:
procedure TForm1.CopyFileWithProgressBar1(SourceDestinationstring); 
var 
FromFToFfile of byte
Buffer: array[0..4096of char
NumReadinteger
FileLengthlongint
begin 
AssignFile
(FromFSource); 
reset(FromF); 
AssignFile(ToFDestination); 
rewrite(ToF); 
FileLength := FileSize(FromF); 
with Progressbar1 do 
begin 
Min 
:= 0
Max := FileLength
while 
FileLength do 
begin 
BlockRead
(FromFBuffer[0], SizeOf(Buffer), NumRead); 
FileLength := FileLength NumRead
BlockWrite(ToFBuffer[0], NumRead); 
Position := Position NumRead
end
CloseFile(FromF); 
CloseFile(ToF); 
end
end

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

کد PHP:
procedure TForm1.Button1Click(SenderTObject); 
begin 
CopyFileWithProgressBar1
('c:\Welcome.exe''c:\temp\Welcome.exe'); 
end

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

کد PHP:
procedure TForm1.CopyFileWithProgressBar1(SourceDestinationstring); 
var 
FromFToFfile of byte
Buffer: array[0..4096of char
NumReadinteger
FileLengthlongint
t1t2DWORD
maxiinteger
begin 
AssignFile
(FromFSource); 
reset(FromF); 
AssignFile(ToFDestination); 
rewrite(ToF); 
FileLength := FileSize(FromF); 
with Progressbar1 do 
begin 
Min 
:= 0
Max := FileLength
t1 := TimeGetTime
maxi := Max div 4096
while 
FileLength do 
begin 
BlockRead
(FromFBuffer[0], SizeOf(Buffer), NumRead); 
FileLength := FileLength NumRead
BlockWrite(ToFBuffer[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 ذخیره میشود و توسط فرمول زیر مقدار زمان باقی مانده تا کپی کامل فایل بدست می آید.


کد PHP:
 ((t2 t1) / min maxi t2 t1) / 100