首页 > 代码库 > 让窗体接受拖放, 并获取拖过来的文件信息

让窗体接受拖放, 并获取拖过来的文件信息

原理分析:    这需要用到 ShellAPI 单元的两个函数: DragAcceptFiles、DragQueryFile;    用 DragAcceptFiles(窗口句柄, True); 以让窗口能够接受拖放;    然后就等待 WM_DROPFILES 消息, 并用 DragQueryFile 函数处理消息参数, 从而获取信息.  --------------------------------------------------------------------------------     代码文件:  --------------------------------------------------------------------------------     unit Unit1;    interface    uses    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    Dialogs, StdCtrls;    type    TForm1 = class(TForm)      Memo1: TMemo;      procedure FormCreate(Sender: TObject);    protected      procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;    end;    var    Form1: TForm1;    implementation    {$R *.dfm}    uses ShellAPI;    procedure TForm1.FormCreate(Sender: TObject);  begin    DragAcceptFiles(Handle, True);  end;    procedure TForm1.WMDropFiles(var Message: TWMDropFiles);  var    p: array[0..255] of Char;    i,count: Integer;  begin    {先获取拖拽的文件总数}    count := DragQueryFile(message.Drop, $FFFFFFFF, nil, 0);      {分别获取文件名}    for i := 0 to count-1 do    begin      DragQueryFile(message.Drop, i, p, SizeOf(p));      Memo1.Lines.Add(p); {既然知道了文件名, 当然也可以随手打开它}    end;  end;    end.  --------------------------------------------------------------------------------    窗体文件:  --------------------------------------------------------------------------------     object Form1: TForm1    Left = 0    Top = 0    Caption = ‘Form1‘    ClientHeight = 154    ClientWidth = 261    Color = clBtnFace    Font.Charset = DEFAULT_CHARSET    Font.Color = clWindowText    Font.Height = -11    Font.Name = ‘Tahoma‘    Font.Style = []    OldCreateOrder = False    OnCreate = FormCreate    PixelsPerInch = 96    TextHeight = 13    object Memo1: TMemo      Left = 0      Top = 0      Width = 261      Height = 129      Align = alTop      Lines.Strings = (        ‘Memo1‘)      ScrollBars = ssBoth      TabOrder = 0    end  end  

  

让窗体接受拖放, 并获取拖过来的文件信息