ファイルをコピー・移動・削除する

SHFileOperation APIを使ってファイルをコピー・移動・削除する方法です。
wFuncに FO_COPYを渡せばコピー、FO_MOVEを渡せば移動、FO_DELETEを渡せば削除になります。fFlagsに FOF_FILESONLYを渡せばファイルだけ、それを外せばサブフォルダまでコピーします。削除の時に FOF_ALLOWUNDOを指定しておけばごみ箱に入ります。
以下のサンプルはユーザに2つのフォルダを選択させ、指定フォルダ内のすべてのファイルをコピーします。

■ ファイルコピーの例
uses
  ShellAPI, FileCtrl;

procedure TForm1.Button1Click(Sender: TObject);
var
  foStruct:  TSHFileOpStruct;
  FromPath: string;
  ToPath: string;
begin
  //コピー元のディレクトリを指定
  if  (SelectDirectory(FromPath, [sdAllowCreate], 0)) then  begin
    //コピー先のディレクトリを指定
    if  (SelectDirectory(ToPath, [sdAllowCreate], 0)) then  begin  
      with   foStruct   do  begin
        wnd                :=   Handle;
        wFunc              :=   FO_COPY;
        pFrom              :=   PChar(FromPath + '\*.*' + #0);
        pTo                :=   PChar(ToPath   + '\' + #0);
        fFlags             :=   FOF_FILESONLY or FOF_ALLOWUNDO;
        fAnyOperationsAborted   :=   False;
        hNameMappings      :=   nil;
        lpszProgressTitle  :=   nil;
      end;
      SHFileOperation(foStruct);
    end;
  end;
end;