让窗体接受拖放, 并获取拖过来的文件信息 - 回复 "海浪问" 的问题


问题来源: http://www.cnblogs.com/del/archive/2009/01/20/1353117.html#1435746

原理分析:

这需要用到 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


 
   

你可能感兴趣的:(文件)