ドラッグ&ドロップを受け入れる

エクスプローラからドラッグ&ドロップでファイル名を取得するには WMDropFiles メッセージと DragAcceptFilesDragQueryFile APIを使用します。DragQueryFile関数の二番目の引数に $FFFFFFFFを渡せばファイルの総数を得ることが出来ます。ファイルのインデックスを指定するには同じく二番目の引数を使用します。

■ エクスプローラからのドロップを受け入れる例
 uses
   ・・・(省略)・・・ ,ShellApi;

 type
   TfrmMain = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    procedure WMDropFiles(var Msg : TWMDROPFILES);  message WM_DROPFILES;
  public
    { Public 宣言 }
  end;

 var
   frmMain: TfrmMain;

 implementation

 procedure TfrmMain.FormCreate(Sender: TObject);
 begin
   { ファイルドロップの受け入れ }
   DragAcceptFiles(Handle, true);
 end;

 { この手続きはすべて手書きします }
 procedure TfrmMain.WMDropFiles(var Msg : TWMDropFiles);
 var
   FileName  : array [0..255]  of  char;
   ix        : integer;
   intFiles  : integer;
 begin
   { いくつのファイルをドロップされたか調べます ]
   intFiles  :=  DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, SizeOf(FileName));  
   { すべてのファイル名をリストボックスに追加します }
   for  ix  :=  0  to  intFiles  - 1  do
   begin
     DragQueryFile(Msg.Drop, ix, FileName, SizeOf(FileName));
     { リストへの追加 }
     ListBox1.Items.Add (FileName);
   end; 
   DragFinish(Msg.Drop);
 end;