SHFileOperation を利用すると、エクスプローラのように履歴を残しながらのコピーと移動が行えます。
さらにコピーのアニメーションまでします。応用でゴミ箱にファイルを削除することも可能です。
Shell 関係の API を利用するので、ShellAPI を uses に追加する必要があります。
以下のサンプル関数で、ファイルのコピーが可能です。
SHFileOpStruct構造体の値を変更することで、移動やゴミ箱に削除などの応用が可能です。
Win32 APIなので、文字列はPWideChar (非Unicode環境ではPChar)にキャストしています。
uses ShellAPI; function FileCopy(Source, Destination: String): boolean; var ShFileOpStruct: TSHFileOpStruct; begin with ShFileOpStruct do begin wnd := Application.Handle; wFunc := FO_COPY; // FO_MOVE であれば、移動になります {$IFDEF UNICODE} pFrom := PWideChar(Source + #0); // 移動元ファイル名 pTo := PWideChar(Destination + #0); // 移動先ファイル名 {$ELSE} pFrom := PChar(Source + #0); // 移動元ファイル名 pTo := PChar(Destination + #0); // 移動先ファイル名 {$ENDIF} fFlags := FOF_ALLOWUNDO; // できる限りアンドゥ情報を保持するように fAnyOperationsAborted := false; hNameMappings := nil; lpszProgressTitle := nil; end; // 正常終了であれば、Trueを返します Result := (SHFileOperation(ShFileOpStruct) = 0); end;
コメント (0件)