TListBox и файловый менеджер
TListBox и файловый менеджер
TListBox и файловый менеджер To use File Manager Drag & Drop, add a method to your form that handles the WM_DROPFILES message. For example, the following would be placed in the TForm1 declaration in the protected section: ... procedure WMDropFiles(var msg : TMessage); message WM_DROPFILES; ... You would typically activate file drag & drop by calling DragAcceptFiles() in the OnCreate event, and turn it off with a subsequent call to DragAcceptFiles() in the OnClose or OnDestroy events. The code follows: procedure TForm1.WMDropFiles(var msg : TMessage); var i, n : word; size : word; fname : string; hdrop : word; begin {1. Get the drop handle.} hdrop := msg.WParam; {2. Find out how many files were dropped by passing $ffff in arg #2.} n := DragQueryFile(hdrop, $ffff, nil, 0); {3. Loop through, reading in the filenames (w/full paths).} for i := 0 to (n - 1) do begin {4. Get the size of the filename string by passing 0 in arg #4.} size := DragQueryFile(hdrop, i, nil, 0); {5. Make sure it won't overflow our string (255 char. limit)} if size < 255 then begin fname[0] := Chr(size); {6. Get the dropped filename.} DragQueryFile(hdrop, i, @fname[1], size + 1); {-- Do whatever you want to do with fname. --} end; end; {7. Return zero.} msg.Result := 0; {8. Let the inherited message handler (if there is one) go at it.} inherited; end; procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Handle, true); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DragAcceptFiles(Handle, false); end; Keep in mind that you don't have to put all of this stuff on a form. Any windowed control that has an HWnd handle (descendants of TWinControl) should be able to accept dropped files.