送您200分-----如何在程序中实现文件的拖拽(100分)

  • 主题发起人 主题发起人 BaiHaibo1
  • 开始时间 开始时间
B

BaiHaibo1

Unregistered / Unconfirmed
GUEST, unregistred user!
; 我想编一个类似资源管理器的程序,如何将ListView里的文件名拖拽到其它程序
中实现拷贝、移动等功能,另外如何把这些文件放到剪切板里(小弟Dephi欠佳,最好
用VB程序讲解,不胜感激)。
 
不管Delphi还是VB,“文件放到剪切板”的说法都是不对的,剪贴板里不过
是放了文件路径而已,而且你的程序没必要考虑剪贴板如何工作——Delphi
里这样,VB我不会
 
>>如何将ListView里的文件名拖拽到其它程序中实现拷贝、移动等功能
表达不清
 
网上有n多个这样的控件,不要说类似资源管理器,就是重写一个资源管理器也没问题呢。
 
1、将窗口设为包括WS_ES_ACCEPTFILE(CreateWindow,或SetWindowLong),
2、自己处理WM_FILEDROP消息.
 
设置onmouseup,onmousemove,onmousedown过程
 
agree面条
 
agree面条
 
agree面条
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WMDrops( var message:tmessage);message WM_DROPFILES;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Dragacceptfiles(form1.handle,true);
end;
procedure TForm1.WMDrops(var message:tmessage);
var
p:array[0..254] of char;
i:word;
begin
inherited;
form1.Memo1.Clear;
{$IFDEF WIN32}
i:=DragQueryFile(Message.wParam,$ffffffff,nil,0);
{$ELSE}
i:=DragQueryFile(Message.wParam,$ffff,nil,0);
{$ENDIF}
caption:=inttostr(i);
for i:=0 to i-1 do
begin
DragQueryFile(Message.wParam,i,p,255);
form1.Memo1.Lines.Add(strpas(p));
end;
end;
end.
 
面条的方法只能实现从外壳拖文件放进来,想从程序里拖出去,得实现一个com接口
具体名字我忘了,自己到msdn上搜搜。

另外我有个自己写的panel控件实现面条的方法,只要把想接收外壳拖进的文件的
部分放到这个panel上就行。打包好的,for Delphi4。原码好象以前卖机子时弄丢
了,想要的re一篇写上email。
 
to jjams:
你说的从程序里拖出去, 是不是类似于WinZip的拖放解压,如果是,来个例子,
最好是CB的,要多少尽管开口,我在学校时写了个ZipExplorer,可以以目录结构的
形式操作Zip文件,但是类似于WinZip的拖放解压一直不知道则么实现。
ZipExplorer可以在www.csdn.net的共享软件/工具类软件/其它软件下载。
http://www.csdn.net/cnshare/softview.asp?id=2694
 
To : 宋远午
多少真的无所谓,只是没时间。要是你感兴趣的话,到msdn上,在Index中
输入Shell Extensions,在右上角点Topic Contents,找到Dragging and Dropping
然后看看就知道了,有点烦,要实现IDropSource和IDataObject,还要注册剪贴板类
型CF_HDROP,把文件名放在剪贴板上……最后DoDragDrop。(如果你做到这里,
呵呵,恭喜)。

(如果有简单的办法,请高手指明!据说在VC里面,自动化对象都支持拖放,不过我不用
VC,不知道是不是真的)
 
To : 宋远午
对了,做好后能不能给我邮一份(JJams_King@263.net)。最好做个通用一点的,
比如做个什么控件之类的(呵呵,做控件好不好我也没想过,随便说说)。
 
我有一套FOR CB5和D5的控件,可以说利用这些控件就可以实现资源管理器。如果想要,可以发给你一套
 
如何拖动ListView的图标呢?(MultiSelect = true时),要有资源管理器的那种效果
 
多人接受答案了。
 
后退
顶部