随笔 - 2146  文章 - 97 评论 - 11767 trackbacks - 253


问题来源: 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

posted on 2009-01-20 21:14  万一  阅读(...)  评论(...编辑  收藏