中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
在Delphi中接受文件拖放
作者:未知 时间:2005-08-07 21:00 出处:编程爱好者网站 责编:chinaitpower
              摘要:在Delphi中接受文件拖放
很不爽的是,用Delphi封装在Form里的那些东西是没办法接受用户从我的电脑里拖放到你的Form上的文件的,但在做软件的时候这又是很必要的,我昨天研究了一晚上终于解决了这个问题。
首先,给你的Project加一个Unit,代码如下:
unit untDrag;

interface

//用来告诉Windows你的Form可以接受文件拖放
{$EXTERNALSYM DragAcceptFiles}procedure DragAcceptFiles(hWnd: Cardinal; fAccept: Boolean); stdcall;
//得到拖放文件名和文件个数的API
{$EXTERNALSYM DragQueryFile}
function DragQueryFile(hDrop: Cardinal; iFile: Cardinal; lpszFile: PChar; cch: Integer): Integer; stdcall;
//释放Windows分配给拖放操作的内存
{$EXTERNALSYM DragFinish}
procedure DragFinish(hDrop: Cardinal); stdcall;
//得到拖放的文件个数
function GetDragFileCount(hDrop: Cardinal): Integer;
//得到拖放的文件名,通过FileIndex来指定文件编号,默认为第一个文件
function GetDragFileName(hDrop: Cardinal; FileIndex: Integer = 1): string;

implementation

procedure DragAcceptFiles; external 'Shell32';
function DragQueryFile; external 'Shell32';
procedure DragFinish; external 'Shell32';

function GetDragFileCount(hDrop: Cardinal): Integer;
const
  DragFileCount=High(Cardinal);
begin
  Result:= DragQueryFile(hDrop, DragFileCount, nil, 0);
end;

function GetDragFileName(hDrop: Cardinal; FileIndex: Integer = 1): string;
const
  Size=255;
var
  Len: Integer;
  FileName: string;
begin
  SetLength (FileName, Size);
  Len:= DragQueryFile(hDrop, FileIndex-1, PChar(FileName), Size);
  SetLength (FileName, Len);
  Result:= FileName;
end;

end.

然后,在你需要处理拖放的Form的OnCreate里面加上这么一句:
DragAcceptFiles (Handle, True);

在TForm1的public里面加上如下声明:
procedure MyDrag (var Msg: TWMDropFiles); message WM_DropFiles;

下面是此过程的实现:
procedure TForm1.MyDrag (var Msg: TWMDropFiles);
var
  hDrop: Cardinal;
  ...
begin
  hDrop:= Msg.Drop;  //这个是拖放句柄
  ...(在这里可以用GetDragFileName和GetDragFileCount)
  //最后记得要用这两句话:
  DragFinish (hDrop);
  Msg.Result:= 0;
end;

当然,要在Form的Unit上面加上
uses untDrag;

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有