| Jak obsłużyć upuszczanie plików na formę? |
|
Należy skorzystać z komunikatu wm_DropFiles. Ma to tą zaletę, że zadziała nawet w Delphi 1.
uses
ShellAPI; {obsługa D&D}
....
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
DragAcceptFiles (Handle, True);
end; {mówimy systemowi że chcemy obsłużyć D&D}
procedure TForm1.WMDropFiles (hDrop : THandle; hWindow : HWnd);
Var
TotalNumberOfFiles,
nFileLength : Integer;
pszFileName : PChar;
i : Integer;
Begin
//liczba zrzuconych plików
TotalNumberOfFiles := DragQueryFile (hDrop , $FFFFFFFF, Nil, 0);
for i := 0 to TotalNumberOfFiles - 1 do begin
nFileLength := DragQueryFile (hDrop, i , Nil, 0) + 1;
GetMem (pszFileName, nFileLength);
DragQueryFile (hDrop , i, pszFileName, nFileLength);
//pszFileName - nazwa upuszczonego pliku
//tutaj robimy coś z nazwą pliku
FreeMem (pszFileName, nFileLength);
end;
DragFinish (hDrop);
end; //sprawdzamy co zostało przeciągnięte i obsługujemy to
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
case Msg.Message of
WM_DROPFILES : WMDropFiles (Msg.wParam, Msg.hWnd);
end;
end; //obsługujemy komunikat WM_DROPFILES
procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction);
begin
DragAcceptFiles (Handle, False);
end; //dziękujemy
Źródło informacji: Artur Prokopiuk. |