在WM_DROPFILES里DragQueryFile就可以了。

解决方案 »

  1.   

    You must interface with the Windows Shell API module to let
    Windows know that your application accepts dropped files (this
    can be done in your main form's create event), and then you must
    respond to the drag events as they happen by creating an event
    handler.The following is an example of a Delphi form that accepts dropped
    files and adds the names of the files to a memo component:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        procedure WMDROPFILES(var Message: TWMDROPFILES);
          message WM_DROPFILES;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}uses ShellApi;procedure TForm1.FormCreate(Sender: TObject);
    begin
     {Let Windows know we accept dropped files}
      DragAcceptFiles(Form1.Handle, True);
    end;procedure TForm1.WMDROPFILES(var Message: TWMDROPFILES);
    var
      NumFiles : longint;
      i : longint;
      buffer : array[0..255] of char;
    begin
     {How many files are being dropped}
      NumFiles := DragQueryFile(Message.Drop,
                                -1,
                                nil,
                                0);
     {Accept the dropped files}
      for i := 0 to (NumFiles - 1) do begin
        DragQueryFile(Message.Drop,
                      i,
                      @buffer,
                      sizeof(buffer));
        Form1.Memo1.Lines.Add(buffer);
      end;
    end;end.
      

  2.   

    type
    TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    private
    procedure WMDROPFILES(var Message: TWMDROPFILES);
    message WM_DROPFILES;
    { Private declarations }
    public
    { Public declarations }
    end;var
    Form1: TForm1;implementation{$R *.DFM}uses ShellApi;procedure TForm1.FormCreate(Sender: TObject);
    begin
    {Let Windows know we accept dropped files}
    DragAcceptFiles(Form1.Handle, True);
    end;procedure TForm1.WMDROPFILES(var Message: TWMDROPFILES);
    var
    NumFiles : longint;
    i : longint;
    buffer : array[0..255] of char;
    begin
    {How many files are being dropped}
    NumFiles := DragQueryFile(Message.Drop,
    $FFFFFFFF,//应该是它
    nil,
    0);
    {Accept the dropped files}
    for i := 0 to (NumFiles - 1) do begin
    DragQueryFile(Message.Drop,
    i,
    @buffer,
    sizeof(buffer));
    Form1.Memo1.Lines.Add(buffer);
    end;
    end;end.
      

  3.   

    最简单的方法是下载一个很小的控件,可以将文件拖到你的程序的容器中,
    如果你的程序没有启动的话,如果把文件拖到你的图标上,会自动启动你
    的程序.这个控件可以从深度历险找到.DDDest