Mirror

Let them drag and drop files on your program (Views: 102)


Problem/Question/Abstract:

Let them drag and drop files on your program

Answer:

If you want to let your users drag and drop files on your program from the File Manager and Windows Explorer, simply add the code inside //>>> and //<<< to your program as in the following example:

unit dropfile;

interface

uses
  Windows, Messages, SysUtils, Classes,
  Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }

    //>>>

    // declare our DROPFILES message handler
    procedure AcceptFiles(var msg: TMessage);
      message WM_DROPFILES;
    //<<<
  end;

var
  Form1: TForm1;

implementation

uses
  //>>>
  //
  // this unit contains certain
  // functions that we'll be using
  //
  ShellAPI;
//<<<

{$R *.DFM}

//>>>

procedure TForm1.AcceptFiles(var msg: TMessage);
const
  cnMaxFileNameLen = 255;
var
  i,
    nCount: integer;
  acFileName: array[0..cnMaxFileNameLen] of char;
begin
  // find out how many files we're accepting
  nCount := DragQueryFile(msg.WParam,
    $FFFFFFFF,
    acFileName,
    cnMaxFileNameLen);

  // query Windows one at a time for the file name
  for i := 0 to nCount - 1 do
  begin
    DragQueryFile(msg.WParam, i,
      acFileName, cnMaxFileNameLen);

    // do your thing with the acFileName
    MessageBox(Handle, acFileName, '', MB_OK);
  end;

  // let Windows know that you're done
  DragFinish(msg.WParam);
end;
//<<<

procedure TForm1.FormCreate(Sender: TObject);
begin
  //>>>
  //
  // tell Windows that you're
  // accepting drag and drop files
  //
  DragAcceptFiles(Handle, True);
  //<<<
end;

end.

Now you can drag and drop files on the form that you registered as a recipient of dropped files by calling the "DragAcceptFiles()" function as in the above example.

<< Back to main page