ListBox с возможностью переносить на него файлы методом DragAndDrop.

Здравствуйте уважаемые коллеги!

В данной статье я покажу как сделать компонент 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;

При перетаскивания файлов на компонент он будет добавлять пути к файлам в конец списка:
lbFiles

Если у вас появятся вопросы по данной теме, пишите их в комментариях или мне на почту:info@asd-soft.ru

Статья добавлена в Delphi. Добавить ссылку в закладки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *