您的位置:首页 > 其它

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

2011-06-06 12:14 405 查看
原理分析:

这需要用到 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: