記事カテゴリ

ユーザー機能


 2024年4月29日(月) 05:08 JST

[Delphi] エクスプローラのように履歴を残しながら、ファイルのコピーや移動を行う

  • 投稿者:
  • 表示回数
    5,413

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;

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/ProgramingFAQ_del0012
  • [Delphi] エクスプローラのように履歴を残しながら、ファイルのコピーや移動を行う
  • 0 コメント
  • アカウントの登録

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