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这个函数来获取相应的数值呢?没有头绪,望大神指点下
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这个函数来获取相应的数值呢?没有头绪,望大神指点下
1、如果获取文件长度,可以通过计算百分比的值,显示Progress进度条
2、开始复制文件就显示一个动态的Progress进度条,复制完毕,关闭Progress进度条。Progress从0-100反复显示。另外,要通过线程来复制和显示Progress进度条。否则,VCL窗口和控件看上去,会出现“等待”性停止状态。
2, 使用IFileOperation接口,支持回调,缺点是要求Vista+,XP不行。