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;

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。