ドラッグ&ドロップを受け入れる
エクスプローラからドラッグ&ドロップでファイル名を取得するには WMDropFiles メッセージと DragAcceptFiles,DragQueryFile APIを使用します。DragQueryFile関数の二番目の引数に $FFFFFFFFを渡せばファイルの総数を得ることが出来ます。ファイルのインデックスを指定するには同じく二番目の引数を使用します。
■ エクスプローラからのドロップを受け入れる例 |
uses ・・・(省略)・・・ ,ShellApi; type TfrmMain = class(TForm) procedure FormCreate(Sender: TObject); private { Private 宣言 } procedure WMDropFiles(var Msg : TWMDROPFILES); message WM_DROPFILES; public { Public 宣言 } end; var frmMain: TfrmMain; implementation procedure TfrmMain.FormCreate(Sender: TObject); begin { ファイルドロップの受け入れ } DragAcceptFiles(Handle, true); end; { この手続きはすべて手書きします } procedure TfrmMain.WMDropFiles(var Msg : TWMDropFiles); var FileName : array [0..255] of char; ix : integer; intFiles : integer; begin { いくつのファイルをドロップされたか調べます ] intFiles := DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, SizeOf(FileName)); { すべてのファイル名をリストボックスに追加します } for ix := 0 to intFiles - 1 do begin DragQueryFile(Msg.Drop, ix, FileName, SizeOf(FileName)); { リストへの追加 } ListBox1.Items.Add (FileName); end; DragFinish(Msg.Drop); end; |