Идёт загрузка страницы...

htp://aptem.net.ru





/|\АРТЕМ.NET.RU /|\ - Портал для программистов и не только: Delphi Visual Basic BORLAND С++ PERL PHP HTML

Delphi 1

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

Для осуществления функции 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 DO
BEGIN
FOR N := 0 TO DragQueryFile(Drop, $FFFF, buffer, 80)-1 DO
BEGIN
DragQueryFile(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 then
BEGIN
MessageBeep(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]