Крошка сын к отцу пришел
И сказала кроха:
Navigator - хорошо,
а Explorer - плохо!
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
ComCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private{ Private declarations }procedure FileIsDropped(var Msg: TMessage); message WM_DropFiles;
public{ Public declarations }end;
var
Form1: TForm1;
implementationuses
shellapi;
{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
procedure TForm1.FileIsDropped(var Msg: TMessage);
var
hDrop: THandle;
fName: array[0..254] of CHAR;
NumberOfFiles: INTEGER;
fCounter: INTEGER;
Names: string;
begin
hDrop := Msg.WParam;
NumberOfFiles := DragQueryFile(hDrop, -1, fName, 254);
Names := '';
for fCounter := 1 to NumberOfFiles dobegin
DragQueryFile(hDrop, fCounter, fName, 254);
// Здесь вы получаете один к одному имя вашего файла
Names := Names + #13#10 + fName;
end;
ShowMessage('Бросаем ' + IntToStr(NumberOfFiles) + ' файла(ов) : ' + Names);
DragFinish(hDrop);
end;
end.
Программа на Delphi, которая создает окно с возможностью перетаскивания файлов в него, аналогично функциональности Проводника Windows в Win95.
Вот разбивка кода:
Интерфейс
Программа использует различные единицы из библиотеки Delphi, включая Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs и ComCtrls.
Типовые объявления
Определен класс формы TForm1 с двумя процедурами: FormCreate (вызывается при создании формы) и FileIsDropped (вызывается при перетаскивании файла на форму).
Переменные
Программа объявляет три переменные:
hDrop: обработчик целевого объекта
fName: массив символов для хранения имени файла
NumberOfFiles: целое число для хранения количества файлов, перетаскиваемых
fCounter: целое число для итерации по файлам
Names: строка для строительства списка имён файлов
FormCreate
В этой процедуре программа вызывает DragAcceptFiles с обработчиком формы и аргументом True, что позволяет форме принимать операции перетаскивания.
FileIsDropped
Эта процедура вызывается при перетаскивании файла на форму. Она обрабатывает перетаскиваемые файлы следующим образом:
1. Получает обработчик целевого объекта из сообщения
2. Вызывает DragQueryFile для получения количества файлов, перетаскиваемых, и хранения их в fName
3. Итерирует по файлам с помощью цикла
4. Для каждого файла вызывает DragQueryFile снова для получения имени файла и хранения его в fName
5. Строит строку Names, содержащую все имена файлов, разделенные символами новой строки (#13#10)
6. Показывает сообщение с количеством файлов, перетаскиваемых, и их именами
7. Вызывает DragFinish для освобождения системных ресурсов, связанных с операцией перетаскивания
Implementation
Программа использует единицу shellapi, которая предоставляет функции для взаимодействия с Проводником Windows.
Окно формы загружается из файла DFM (не показан) с помощью директивы $R *.DFM.
В целом, этот код демонстрирует, как создать基本ную функциональность перетаскивания файлов в Delphi, аналогичную функциональности Проводника Windows.
В статье рассматривается использование функции Drag and Drop в приложении Win95 Explorer на языке Pascal, где автор предоставляет пример кода для реализации этой функции.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.