如何让某个文件拖到我所做的并运行中的程序的窗口放开后获取文件路径及文件名

huiwww 2004-05-05 11:43:09
如何让某个文件拖到我所做的并运行中的程序的窗口放开后获取文件路径及文件名,最好提供代码,谢谢
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
huiwww 2004-05-05
  • 打赏
  • 举报
回复
c++ builder?懂部分,但不是全部,在delphi里没有DropFile(TWMDropFiles &Msg)事件,帮自己up一下
bottom 2004-05-05
  • 打赏
  • 举报
回复
void __fastcall DropFile(TWMDropFiles &Msg);
//---------消息映射----------------------------
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify)
MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,DropFile)
END_MESSAGE_MAP(TForm)
//---------消息映射--------------------------------------
bottom 2004-05-05
  • 打赏
  • 举报
回复
void __fastcall TForm1::FormShow(TObject *Sender)
{
DragAcceptFiles(this->Handle ,true);
}

void __fastcall TForm1::DropFile(TWMDropFiles &Msg)
{
String FileName;
String FileStr;
int i;
if (tv1->Items->Count ==0)
{
MyMsgBox("没有分类,不能添加","*_*",2);
return;
}
TTreeNode * cnode ;
int DropCount=DragQueryFile((HDROP)Msg.Drop,0xFFFFFFFF,NULL,0 );

FileName.SetLength(256);

TfrmDrop1 *tmpfrm=new TfrmDrop1(NULL);
tmpfrm->canadd =false;
tmpfrm->lb1->Items->Clear() ;

for (i=0;i<DropCount;i++)
{ //1
DragQueryFile((HDROP)Msg.Drop,i,FileName.c_str() ,FileName.Length() );
tmpfrm->lb1->Items->Add(FileName) ;
} //2
DragFinish((HDROP)Msg.Drop);
tmpfrm->ShowModal() ;


hewei2003 2004-05-05
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellAPI,
StdCtrls, MPlayer;

type
TForm1 = class(TForm)
Label1: TLabel;
ListBox1: TListBox;
private
{ Private declarations }
public
{ Public declarations }
protected
procedure CreateParams(var Params:TCreateParams);override;
procedure WMDropFiles(var Message:TWMDropFiles);message WM_DropFiles;
end;

var
Form1: TForm1;

implementation


{$R *.DFM}

//重载CreateParams方法
procedure TForm1.CreateParams(var Params:TCreateParams);
begin

inherited CreateParams(Params);
Params.ExStyle:=Params.ExStyle or WS_EX_ACCEPTFILES;
end;

//响应WM_DROPFILES消息
procedure TForm1.WMDropFiles(var Message:TWMDropFiles);
var
FNumFiles,i,BufSize:Integer;
FFilePath:array of char;
FFileName:string;
begin
//取得文件个数
FNumFiles:=DragQueryFile(Message.Drop,$FFFFFFFF,nil,0);
//处理各个文件
for i:=0 to FNumFiles-1 do
begin
//获得存放文件名buffer的大小
BufSize:=DragQueryFile(Message.Drop,i,nil,0);
//获得文件名。文件名是以0结尾的字符串,包含路径。
SetLength(FFilePath,BufSize+1);
DragQueryFile(Message.Drop,i,PChar(FFilePath),BufSize+1);
//将文件名加入到listbox1中
listbox1.Items.Add(PChar(FFilePath));
end;
DragFinish(Message.drop);
end;

end.

My Email:cqhw2003@126.com
SeaWave 2004-05-05
  • 打赏
  • 举报
回复
这个不能说是DropFile事件,呵呵,不能这么说

这是由WINDOWS发出的消息WM_DROPFILES,DELPHI里也能捕获这个消息:

procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧