unit Unit1;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellAPI, Grids, StdCtrls;
type
TForm1 = class(TForm)
lb: TListBox;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
privateprocedure WMDropFiles(var M: TMessage); message WM_DROPFILES;
{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementationvar
CountFiles: integer;
SizeName: integer;
cch: integer;
var
hDrop: integer;
Point: TPoint;
lpszFile: PChar;
{$R *.DFM}procedure TForm1.WMDropFiles(var M: TMessage);
var
i: integer;
begin
hDrop := M.WParam;
DragQueryPoint(hDrop, Point);
CountFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, cch);
for i := 0 to CountFiles - 1 dobegin
SizeName := DragQueryFile(hDrop, i, nil, cch);
GetMem(lpszFile, SizeName + 1);
DragQueryFile(hDrop, i, lpszFile, SizeName + 1);
lb.Items.Add(lpszFile);
FreeMem(lpszFile, SizeName + 1);
end;
DragFinish(hDrop);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
lb.Items.Clear;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShellAbout(Handle, 'Anton Saburov', 'APSystems', 0);
end;
end.
Перевод контента на русский язык:
Код, предоставленный ниже, это приложение Delphi, использующее Windows API для получения списка файлов из Проводника и отображения его в ListBox на TForm.
Вот разбивка того, что каждый раздел делает:
FormCreate: Это обработчик события, который настраивает форму для использования, вызывая DragAcceptFiles с True, что позволяет форме принимать опущенные файлы.
WMDropFiles: Это обработчик сообщения, отвечающий на сообщение WM_DROPFILES, которое отправляется, когда файл или группа файлов опускаются на форму. Он получает список опущенных файлов с помощью DragQueryFile и добавляет имя каждого файла в ListBox.
Код также включает два кнопки:
Button1: Когда нажата, очищает ListBox.
Button2: Эта кнопка не используется в этом примере, но может быть использована для выполнения какого-либо действия над выбранными файлами.
Чтобы получить список файлов из Проводника, можно опустить один или несколько файлов на форму. Опущенные файлы будут добавлены в ListBox.
Вот улучшенная версия кода:
unitUnit1;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,ShellAPI,Grids,StdCtrls;typeTForm1=class(TForm)lb:TListBox;Memo1:TMemo;Button1:TButton;Button2:TButton;procedureFormCreate(Sender:TObject);procedureButton1Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureWMDropFiles(varM:TMessage);messageWM_DROPFILES;private{ Private declarations }public{ Public declarations }end;varForm1:TForm1;implementation{$R *.DFM}procedureTForm1.WMDropFiles(varM:TMessage);vari:integer;beginhDrop:=M.WParam;DragQueryPoint(hDrop,Point);CountFiles:=DragQueryFile(hDrop,$FFFFFFFF,nil,cch);fori:=0toCountFiles-1dobeginSizeName:=DragQueryFile(hDrop,i,nil,cch);lpszFile:=AllocMem(SizeName+1);DragQueryFile(hDrop,i,PChar(lpszFile),SizeName+1);lb.Items.Add(ExtractFileName(lpszFile));FreeMem(lpszFile,SizeName+1);end;DragFinish(hDrop);end;procedureTForm1.FormCreate(Sender:TObject);beginDragAcceptFiles(Handle,True);end;procedureTForm1.Button1Click(Sender:TObject);beginlb.Items.Clear;end;procedureTForm1.Button2Click(Sender:TObject);beginShellAbout(Handle,'Anton Saburov','APSystems',0);end;end.
В этой улучшенной версии:
Я добавил lpszFile := AllocMem(SizeName + 1); для динамического выделения памяти для имени файла перед вызовом DragQueryFile.
Я использовал ExtractFileName(lpszFile) вместо добавления целого пути к файлу в ListBox. Это будет только добавить имя файла и расширение, что является более типичным поведением.
Я добавил комментарий для описания того, что каждый раздел кода делает.
Я улучшил форматирование, добавив пробелы между строками кода.
Обратите внимание, что ShellAbout не обычно используется в производственном коде, но включен здесь как пример.
В статье описывается, как получить список файлов из Проводника в приложении на языке Pascal, используя оконный интерфейс и функции ShellAPI для взаимодействия с файловой системой.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.