{Так можно заставить окно принимать файлы, перетаскиваемые из проводника}{ОБЯЗАТЕЛЬНО ПОМЕСТИТЕ В СЕКЦИЮ PRIVATE СТРОКИ
procedure CreateParams(var Params: TCreateParams); override;
procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
и не забудьте - ShellAPI поместить в uses}procedure TForm1.CreateParams(var Params: TCreateParams);
begininherited
CreateParams(Params);
{сделаем окно способным принимать файлы}
Params.ExStyle := Params.ExStyle or WS_EX_ACCEPTFILES;
end;
procedure TForm1.WMDropFiles(varMessage: TWMDropFiles);
var
aFile: array[0..255] of Char;
//FilesCount : Integer;begininherited;
{так можно узнать сколько файлов перетягивается}// FilesCount := DragQueryFile(Message.drop, $FFFFFFFF, nil, 0);begin{здесь можно поставить цикл открытия всех перетаскиваемых файлов
for N := 0 to FilesCount - 1 do DragQueryFile(Message.drop, N, aFile, 256);
а в данном случае открывается только первый файл в списке}
DragQueryFile(Message.drop, 0, aFile, 256);
Memo1.Lines.LoadFromFile(aFile);
end;
DragFinish(Message.Drop);
end;
procedure TForm1.FormCreate(Sender: TObject); {Form1.OnCreate}begin{сделаем окно неравнодушным к пролетающим над ним файлам}
DragAcceptFiles(Handle, True);
end;
Вот перевод текста на русский язык:
Процедура CreateParams
procedureTForm1.CreateParams(varParams:TCreateParams);begininherited;Params.ExStyle:=Params.ExStyleorWS_EX_ACCEPTFILES;// Сделать окно принимать файлыend;
Эта процедура переопределяется для изменения записи TCreateParams. Она устанавливает свойство ExStyle в включение стиля WS_EX_ACCEPTFILES, который позволяет окну принимать файлы, перетаскиваемые из Windows Explorer.
Процедура WMDropFiles
procedureTForm1.WMDropFiles(varMessage:TWMDropFiles);varaFile:array[0..255]ofChar;// Буфер имени файлаbegininherited;DragQueryFile(Message.Drop,0,aFile,256);// Получить имя первого файла в спискеMemo1.Lines.LoadFromFile(aFile);// Загрузить файл в контрольный элемент Memoend;
Эта процедура вызывается при перетаскивании файла на окно. Она использует функцию DragQueryFile для получения имени первого файла в списке, а затем загружает этот файл в контрольный элемент Memo (предполагается, что есть один с именем Memo1).
Процедура FormCreate
procedureTForm1.FormCreate(Sender:TObject);beginDragAcceptFiles(Handle,True);// Сделать окно принимать файлыend;
Эта процедура вызывается при создании формы. Она вызывает функцию DragAcceptFiles для сделать окно принимать файлы.
Замечания
Код использует unit ShellAPI, который предоставляет функции для взаимодействия с оболочкой (Windows Explorer).
Процедура WMDropFiles предполагает, что есть контрольный элемент Memo с именем Memo1, где будет загружен файл.
Код только обрабатывает первый файл в списке. Если вам нужно обрабатывать несколько файлов, вам придется изменить код соответствующим образом.
В целом, этот код предоставляет основной пример создания окна, которое принимает файлы, перетаскиваемые из Windows Explorer в Delphi.
В статье описывается способ создания приложения на языке Pascal с использованием Win95 Explorer для перетаскивания и обработки файлов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.