Цитата:
Сообщение от Turbine
О реализации именно этой задачи практически нигде и ничего не сказано...
|
Информации много, надо только уметь и знать где искать - в DelphiWorld целый раздел есть по Drag&Drop, взял из этой статьи:
http://www.delphiworld.narod.ru/base...iles_list.html
1. Добавляем в список модулей ShellAPI
2. В описание формы раздел private:
Код:
procedure WMDropFiles(var M: TMessage); message WM_DROPFILES;
3. Пишем саму процедуру:
Код:
procedure TForm1.WMDropFiles(var M: TMessage);
var
i, indx, CountFiles, SizeName, cch, hDrop: integer;
wnd:HWND;
Point: TPoint;
lpszFile: string;
begin
hDrop := M.WParam;
cch:=0;
indx:=-1;
DragQueryPoint(hDrop, Point);
CountFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, cch);
// Получаем идентификатор окна над которым находиться курсор
wnd:=ChildWindowFromPoint(Form1.Handle,Point);
for i:=0 to Form1.ComponentCount-1 do // для всех компонентов
if (Form1.Components[i] is TListBox) then // если это ListBox
if (Form1.Components[i] as TListBox).Handle = Wnd then // и его Handle совпадает с полученным
begin Indx:=i; Break; end; // запоминаем индекс компонента
for i := 0 to CountFiles - 1 do
begin
SizeName := DragQueryFile(hDrop, i, nil, cch);
SetLength(lpszFile, SizeName+1);
DragQueryFile(hDrop, i, Addr(lpszFile[1]), SizeName+1);
if indx <> -1 then // если нужный компонент найден - добавляем строку
(Form1.Components[indx] as TListBox).Items.Add(lpszFile); // подразумевается, что это ListBox
lpszFile:='';
end;
DragFinish(hDrop);
end;
4. В событие OnCreate формы добавляем код:
Код:
DragAcceptFiles(Handle, True);