AsuYuHomepage
トップページ サイトの説明 子供の成長記録 JM BAR Delphi リンク集
Home>>プログラミング>>Tips&Tricks>>エクスプローラからのドラッグ&ドロップ
Delphi Tips
Delphi Win32API
ダウンロード

Delphi Tips & Tricks

エクスプローラからのドラッグ&ドロップを受けいれる。

 エクスプローラからドラッグ&ドロップでファイルを開いたりする機能は多くのソフトでおなじみですが、視覚的に操作できるので大変気持ちいいものです。
 どこのTipsにもあるサンプルですが、エクスプローラからドロップされたファイル名を取得し、それをもとに処理をおこないます。
スポンサードリンク
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;