Copiando conjuntos de arquivos com animação
O exemplo a seguir demonstra como utilizar a função SHFileOperation para copiar um conjunto de arquivos e exibir um diálogo de progresso. Você pode também utilizar os seguintes atributos para remover, mover ou renomear um conjunto de arquivos.
FO_COPY
FO_DELETE
FO_MOVE
FO_RENAME
Nota: O buffer com os nomes dos arquivos a serem copiados deve terminar com um duplo caracter terminal null.
O exemplo a seguir copia três arquivos para o drive “D”.
uses ShellAPI;
procedure TForm1.Button1Click(Sender: TObject) ;
var
Fos: TSHFileOpStruct;
Buf: array[0..4096] of char;
p: pchar;
sDest: string;
begin
FillChar(Buf, sizeof(Buf), #0) ;
p := @buf;
p := StrECopy(p, 'C:\FirstFile.ext1') + 1;
p := StrECopy(p, 'C:\SecondFile.ext2') + 1;
StrECopy(p, 'C:\ThirdFile.ext3') ;
sDest := 'D:\';
FillChar(Fos, sizeof(Fos), #0) ;
with Fos do
begin
Wnd := Handle;
wFunc := FO_COPY;
pFrom := @Buf;
pTo := PChar(sDest);
fFlags := 0;
end;
if ((SHFileOperation(Fos) <> 0) or
(Fos.fAnyOperationsAborted <> false)) then
ShowMessage('Cancelado');
end;