uses SHELLAPI;//usesに追加
---------------------------------------------------
private
//WM_DROPFILESを受け取るイベントハンドラの宣言
procedure WMDropFiles(var msg: TWMDROPFILES); message WM_DROPFILES;
---------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
//ドラッグの受入れを許可する
DragAcceptFiles(Handle, true);
end;
procedure TForm1.WMDropFiles(var msg: TWMDROPFILES);
var
DropCount: Integer;
pFilename: PChar;
begin
try
//ドロップされたファイル数をDropCountに取得
DropCount := DragQueryFile(msg.Drop, $ffffffff, nil, 0);
//複数ドロップを抑制する場合は処理を抜ける
if DropCount > 1 then begin
ShowMessage('ドロップするファイルは1個にしてください。');
Exit;
end;
//ドロップされたファイル名のサイズを取得
DropCount := DragQueryFile(msg.Drop, 0, nil, 0) + 1;
//pFilenameに上で得たサイズ分のメモリを確保
pFilename := AllocMem(DropCount);
try
//pFilenameにファイル名を取得
DragQueryFile(msg.Drop, 0, pFilename, DropCount);
Showmessage(pFilename);
finally
//メモリ開放
FreeMem(pFilename);
end;
finally
//処理の終了をOSに通知
DragFinish(msg.Drop);
end;
end; |