読者です 読者をやめる 読者になる 読者になる

エクスプローラーやFinderからドラッグアンドドロップされたファイルを受け入れる

エクスプローラーやFinderからドラッグアンドドロップされたファイルを受け入れる例。
FireMonkeyでもVCLでも一緒なのかな。試したバージョンはDelphiXE3。
DragOverイベントでAcceptにTrueを代入することで、ドラッグを受け入れられる。
ドロップされた際にDragDropイベントが発生するので、Data引数のFilesを参照する。

{ 中略 }
procedure TForm1.Memo1DragDrop(Sender: TObject; const Data: TDragObject;
  const Point: TPointF);
begin
  { 1つ目のファイルを読み込んで表示 }
  Memo1.Lines.LoadFromFile(Data.Files[0], TEncoding.UTF8);
end;

procedure TForm1.Memo1DragOver(Sender: TObject; const Data: TDragObject;
  const Point: TPointF; var Accept: Boolean);
begin
  Accept := True;
end;

各環境での動作中のスクリーンショットは以下の通り。Memoコンポーネントの部分にファイルをドロップ可能。
WindowsXP(32bit)

Windows7(64bit)

MacOSX10.6

ドラッグアンドドロップの処理は以前のバージョンではサードパーティコンポーネントを使ってたりしたけど、特にいらなさそうかな。
FMXの完成度高いなー。

ソースコードとビルド済みのバイナリ

S3に置きました。zipで9MB強ぐらい。FMXをusesに入れるだけで実行ファイルは結構でかくなりますね。
http://static2.nullpobug.com.s3.amazonaws.com/public/delphi/fmx_filedrop.zip