Операции перетаскивания - обычно используемые в приложениях Windows. При работе с Проводником, Вы можете копировать, перемещать и даже удалять файлы с использованием перетаскивания.
Перемещение объекта с нажатой кнопкой мыши обычно называется перетаскиванием, а когда мы отпускаем кнопку мыши, называется опусканием.
Во перетаскивания из Проводника Windows, Вы должны обработать несколько API сообщений.
Возможность принимать файлы
Для объекта (окна), типа формы 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.
|