テスト投稿を兼ねて。
1.usesの追加
uses
ShellAPI, ActnList;
2.FormCreateなどで受け付け
procedure Sample.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, true);
end;
3.ドラッグ&ドロップ用メソッドの実装
procedure Sample.WMDropFiles(var msg: TWMDROPFILES);
var
DropCount: Integer;
DropFile: Integer;
pFileName: PChar;
begin
try
DropCount := DragQueryFile(msg.Drop, $ffffffff, nil, 0);
if DropCount <> 1 then begin
MessageDlg('ファイルは1つずつドラッグしてください。', mtWarning, [mbOk], 0);
end;
end;
//ドロップされたファイル名のサイズを取得
DropFile:= DragQueryFile(msg.Drop, 0, nil, 0) + 1;
//pFilenameに上で得たサイズ分のメモリを確保
pFileName := AllocMem(DropFile);
try
//pFilenameにファイル名を取得
DragQueryFile(msg.Drop, 0, pFilename, DropFile);
//後はファイル名を使って読み込むなりなんなり
LoadCSV(pFileName);
finally
//メモリ開放
FreeMem(pFilename);
end;
finally
//処理の終了をOSに通知
DragFinish(msg.Drop);
end;
end;
上記はファイルを1つだけドラッグ&ドロップする場合だが、
for idx := 0 to DropCount-1 do begin
DropFile:= DragQueryFile(msg.Drop, idx, nil, 0) + 1;
DragQueryFile(msg.Drop, idx, pFilename, DropFile);
end;
とすれば複数ファイルも受け付けられる。