procedure TForm1.btn1Click(Sender: TObject);
var
S1,s2:string;
begin
S1:= edt1.text;
s2:= edt2.text;
if CopyAllFile(s1,s2) = 0 then ShowMessage('復制成功');
end;
function TForm1.CopyAllFile(str1, str2: string): Integer;
var
MyStruct: TSHFileOpStruct;
begin
with MyStruct do
begin
Wnd:= Application.Handle;
wFunc:= FO_COPY;
pFrom:= PWideChar(str1+#0);
pTo:= PWideChar(str2+#0);
fFlags:= FOF_NOCONFIRMATION or FOF_SIMPLEPROGRESS;
fAnyOperationsAborted:= false;
hNameMappings:= nil;
lpszProgressTitle:= nil;
end;
Result := SHFileOperation(MyStruct);
end;
上面是我寫的復制整個檔案夾的例子,但是我想在我的視窗增加一個TProgress 控制元件的進度條,那SHFileOperation這個函式如何獲取復制程序中的進度值,假如進度條的值是0-100,那要怎么結合SHFileOperation這個函式來獲取相應的數值呢?沒有頭緒,望大神指點下
uj5u.com熱心網友回復:
換一種考慮,復制檔案的時候可以顯示一個Animate檔案復制影片。uj5u.com熱心網友回復:
Animate檔案復制影片不好看,我就想一個進度條顯示uj5u.com熱心網友回復:
先列一個表包含要復制的所有檔案,然后檔案一個一個復制,根據已復制的檔案個數或者MB數改變進度條。uj5u.com熱心網友回復:
二種方式1、如果獲取檔案長度,可以通過計算百分比的值,顯示Progress進度條
2、開始復制檔案就顯示一個動態的Progress進度條,復制完畢,關閉Progress進度條。Progress從0-100反復顯示。
另外,要通過執行緒來復制和顯示Progress進度條。否則,VCL視窗和控制元件看上去,會出現“等待”性停止狀態。
uj5u.com熱心網友回復:
很多時候搞進度條不用很精確的,比如下載檔案 在下載之時無法知道檔案總大小,就無法知道精確的百分比或者進度,你可以大致設定一個范圍,在操作完成之后關閉掉進度條即可。uj5u.com熱心網友回復:
1. 先搜索一下要復制的所有檔案,取得檔案大小,相加得到總量,然后回圈呼叫CopyFileEx復制每個檔案,這個API支持回呼,在其中處理進度即可。2, 使用IFileOperation介面,支持回呼,缺點是要求Vista+,XP不行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39567.html
標籤:語言基礎/算法/系統設計
