Советы по Delphi

       

Прием файлов из Program Manager I


Смотри функцию Windows API DragAcceptFiles. Вы должны это вызвать, чтобы зарегистрировать вашу программу в качестве "приемного пункта" перетаскиваемых файлов. Далее в вашем приложении вы должны реагировать на сообщение WM_DROPFILES, возникающее при операции drag/drop из File Manager. [000413]


Для осуществления функции drag/drop из File Manager, вы должны "зарегистрировать" дескриптор принимаемой формы (свойство Handle) Windows API функцией

DragAcceptFiles(Handle, True);

После этого вы сможете получать сообщения WM_DROPFILES при перетаскивании файлов из File Manager в вашу форму. Для "отключения" этой характеристики необходимо вторично вызвать ту же API функцию, но со вторым параметром равным False.

Для получения имен перетаскиваемых файлов необходимо воспользоваться Windows функцией DragQueryFile, для получения информации при окончании операции Drag/Drop воспользуйтесь функцией DragFinish. DragQueryPt подскажет вам в каком месте формы былы "брошены" перетаскиваемые файлы.

Вам необходимо принимать файлы даже при свернутой форме? Для этого нужно дополнительно создать обработчик события OnMessage объекта Application. Нижеприведенный пример предполагает, что на форме имеется компонент ListBox, свойство Align которого установлено в alClient:

...{ Private declarations }procedure WMDropFiles(VAR Msg: TWMDropFiles);message WM_DROPFILES;procedure AppOnMessage(VAR Msg: TMsg;VAR Handled : Boolean);...
implementation
USES
ShellApi;
...
procedure TForm1.WMDropFiles(VAR Msg: TWMDropFiles);
VAR
N : Word;buffer : ARRAY[0..80] OF Char;BEGIN
WITH
Msg DOBEGINFOR N := 0 TO DragQueryFile(Drop, $FFFF, buffer, 80)-1 DOBEGINDragQueryFile(Drop, N, Buffer, 80);ListBox1.Items.Add(StrPas(Buffer));END;DragFinish(Drop);END;
END;

procedure TForm1.AppOnMessage(VAR Msg: TMsg;
VAR Handled : Boolean);VAR WMD : TWMDropFiles;
BEGIN
IF
Msg.message = WM_DROPFILES thenBEGINMessageBeep(0);WMD.Msg := Msg.message;WMD.Drop := Msg.wParam;WMD.Unused := Msg.lParam;WMD.Result := 0;WMDropFiles(WMD);Handled := TRUE;END;
END;

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);DragAcceptFiles(Application.Handle, True);Application.OnMessage := AppOnMessage;end;

[000466]



Содержание раздела