エクスプローラーや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