delphi 实现拖拽打开文件
2015-07-26 01:56
656 查看
步骤如下,delphi 7测试通过
1、在uses 中增加 ShellAPI
2、增加拖拽的消息处理函数
//声明
protected
procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;
//实现
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var a : Integer;
Buffer: Array[0..255] of Char;
begin
a := DragQueryFile(Msg.wParam, $FFFFFFFF, Buffer, 255);
for a := 0 to a - 1 do begin //处理选择多个文件
DragQueryFile(Msg.wParam, a, Buffer, 255);
//文件名就在Buffer里面了,
ShowMessage(Buffer);
end;
DragFinish(Msg.wParam);
end;
3、指定接收拖拽的窗口句柄
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);//使窗口句柄可以接收拖拽操作
end;
说明:上面代码可以使窗口的任何部位都可以接收拖拽文件,包含菜单、按钮、工具条等,photo shop就是窗口的任何部分都可以接收拖拽文件。可以修改FormCreate中的DragAcceptFiles(Handle, True)函数的第一个参数,这样可以指定一个小的区域来接收拖拽文件,比如一个listbox或memo等,这时需要修改procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;
因为该函数只是处理窗口的拖拽事件,而不处理子窗口的拖拽事件,一个变通的方式是做一个能够处理所有消息的函数,然后从中过滤出拖拽事件。
1、在uses 中增加 ShellAPI
2、增加拖拽的消息处理函数
//声明
protected
procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;
//实现
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var a : Integer;
Buffer: Array[0..255] of Char;
begin
a := DragQueryFile(Msg.wParam, $FFFFFFFF, Buffer, 255);
for a := 0 to a - 1 do begin //处理选择多个文件
DragQueryFile(Msg.wParam, a, Buffer, 255);
//文件名就在Buffer里面了,
ShowMessage(Buffer);
end;
DragFinish(Msg.wParam);
end;
3、指定接收拖拽的窗口句柄
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);//使窗口句柄可以接收拖拽操作
end;
说明:上面代码可以使窗口的任何部位都可以接收拖拽文件,包含菜单、按钮、工具条等,photo shop就是窗口的任何部分都可以接收拖拽文件。可以修改FormCreate中的DragAcceptFiles(Handle, True)函数的第一个参数,这样可以指定一个小的区域来接收拖拽文件,比如一个listbox或memo等,这时需要修改procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;
因为该函数只是处理窗口的拖拽事件,而不处理子窗口的拖拽事件,一个变通的方式是做一个能够处理所有消息的函数,然后从中过滤出拖拽事件。
相关文章推荐
- Delphi : 文件的拖放和打开,拖拽
- Delphi7学习第二天
- Delphi7学习第一天
- Delphi Refactor 重构
- Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值
- Delphi常用字符串函数
- QT类库与Delphi类库的体系结构对比——两者十分类似!
- delphi使用细节
- Delphi 中的哈希表: THashedStringList
- delphi中pos和Ansipos函数的区别
- Delphi System.Sqr、System.Sqrt - 求一个数的平方与平方根
- delphi如何将real类型转为pchar
- Delphi 2010 中的泛型
- Delphi Edit限制只能输入数字
- delphi编码
- Delphi中Messagedlg用法
- Delphi Randomize
- WIN7 64位系统Delphi6安装EhLib【向程序发送命令时出现问题】
- delphi 防止For运行时候程序界面卡死
- delphi 程序嵌入桌面效果的实现