Здравствуйте уважаемые коллеги!
В данной статье я покажу как сделать компонент ListBox, на который можно будет перетаскивать файлы из проводника методом DragAndDrop.
Создадим класс TDropFilesListBox наследованный от TListBox.
type TDropFilesListBox = class(TListBox) private procedure CreateParams(var Params: TCreateParams); override; procedure WMDropFiles(Var Msg: TWMDropFiles); Message WM_DROPFILES; end;
В разделе implementation опишем процедуры:
procedure TDropFilesListBox.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.EXStyle or WS_EX_ACCEPTFILES; end; procedure TDropFilesListBox.WMDropFiles(var Msg: TWMDropFiles); var FileName: Array[0..MAX_PATH] of Char; i, cnt: integer; Begin cnt := DragQueryFile(Msg.Drop, DWord(-1), FileName, SizeOf(FileName)); for i := 0 to - 1 do begin DragQueryFile(Msg.Drop, i, FileName, SizeOf(FileName)); Self.Items.Add(String(FileName)); end; DragFinish(Msg.Drop); end;
Params.ExStyle := Params.EXStyle or WS_EX_ACCEPTFILES; — Добавляем стиль, который будет позволять «Бросать» файлы на компонент.
DragQueryFile — Процедура получает данные о файлах, которые перетащили на компонент. Для неё необходимо добавить модуль ShellApi в разделе Uses.
Теперь можем использовать его в своей программе:
procedure TForm1.FormCreate(Sender: TObject); var lbFiles: TDropFilesListBox; begin lbFiles := TDropFilesListBox.Create(Self); lbFiles.Parent := Self; end;
При перетаскивания файлов на компонент он будет добавлять пути к файлам в конец списка:
Если у вас появятся вопросы по данной теме, пишите их в комментариях или мне на почту:info@asd-soft.ru