Позволить формам принимать файлы из проводника
Возможность принимать файлы
Для объекта (окна), типа формы Delphi, чтобы быть способным принимать файлы из оболочки Windows, требуется вызов DragAcceptFiles. Затем нужно обработать сообщение WM_DROPFILES.
Например:
- Имеется форма Delphi по имени dropForm
- Есть управление Memo по имени Memo1
- Код, который регистрирует форму как окно, которое принимает файлы в событии OnCreate формы. Процедура WMDROPFILES обрабатывает файлы, внося их в список Memo
unit dropFormUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TDropForm = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject) ; private procedure WMDROPFILES(var msg : TWMDropFiles) ; message WM_DROPFILES; public { Public declarations } end; var DropForm: TDropForm; implementation {$R *.dfm} uses ShellApi; // обработчик события OnCreate формы procedure TDropForm.FormCreate(Sender: TObject) ; begin // форма готова принимать файлы DragAcceptFiles( Handle, True ) ; end; // дескриптор файлов, опускаемых на форме procedure TDropForm.WMDROPFILES(var msg: TWMDropFiles) ; const MAXFILENAME = 255; var cnt, fileCount : integer; fileName : array [0..MAXFILENAME] of char; begin // сколько файлов опустили на форму? fileCount := DragQueryFile(msg.Drop, $FFFFFFFF, fileName, MAXFILENAME) ; // запрос имен файлов for cnt := 0 to -1 + fileCount do begin DragQueryFile(msg.Drop, cnt, fileName, MAXFILENAME) ; // что-то сделать с этим файлом memo1.Lines.Insert(0, fileName) ; end; // освободить память DragFinish(msg.Drop) ; end; end.
Комментарии