接受文本和URL的拖放(200分)

  • 主题发起人 主题发起人 nickruler
  • 开始时间 开始时间
N

nickruler

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个类似网络蚂蚁的拖放窗口
现在我想让它接受文本和URL的拖放(一定要两者都能接收),而又不想使用第3方的控件
请问怎样做?最好有源码。
 
而又不想使用第3方的控件,Why?
 
要实现 IDropObject ,以前论坛上有很详细的讨论。
 
不用别人的控件,可以参考别人的源代码.
建议看一看drag & drop 控件组的源代码.
 
我曾经用过drag&drop,但同一时间只能注册一种拖放,要么文本,要么url
 
把这窗体注册为“可接受windows拖放的窗体”
用windows API函数
DragQueryFile
DragFinish
 
看看Hook和窗体句柄能不能帮你
 
黄海波,
能说得具体些吗?
 
有没有人有更好的办法?
 
>>我曾经用过drag&drop,但同一时间只能注册一种拖放,要么文本,要么url
其实不然,我只注册了URL, 但是可以拖放文本!
请看我写的这个程序:
http://61.134.4.193:8080/friendmake/TxtBasket_src.rar
 
Thanks very much
 
http://61.134.4.193:8080/friendmake/TxtBasket_src.rar
现在在哪里吗?
 
在VB里面好简单:为什么用Delphi挺难?

标题 :用 VB 实现网络蚂蚁的拖放窗口
作者:武汉 艾军
在网络蚂蚁的查看菜单中,有菜单项名叫"拖放窗口",当我们需要下载文件时,只要把网页
中的超链接拖到这个"窗口"里就能顺序的进行文件的下载,下面我们就在 VB 中尝试制做这
种"拖放窗口"。
第一步,我们先要使"窗口"永远显示在第一位。
因为我们在浏览网页时,要开许多 IE 窗口,那当然不能让这个拖放窗口被 IE 窗口覆盖
到,这个技巧可以用 API 函数 SetWindowPos 来实现。
第二步,我们要制作无边框的窗口。(没有标题栏)
因为这样看起来比较专业,这个技巧比较容易,可以通过设置 Form 的 BorderStyle
属性来实现。
第三步,我们要能用鼠标拖动这个窗口。
因为我们的第二步操作,由于这个窗口没有了标题栏,只能通过 API 函数 ReleaseCapture、
SendMessage 来实现窗口的拖动。
第四步,我们要使这个窗口接受拖放。(就是拖超链接呀)
这步最关键,不过也最简单,只要设置 Form 的OLEDropMode 属性就行了。
好了,步骤完成,现在开始程序的完整代码了:
Private Declare Function ReleaseCapture Lib "user32" () As Long '释放鼠标捕获
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
As Long '向窗口进程发送消息
Const HTCAPTION = 2
Const WM_NCLBUTTONDOWN = &HA1

Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const HWND_TOPMOST = -1
Const SWP_SHOWWINDOW = &H40
Const strWebSite = "你拖放的是网页地址,地址是"
Const strWebImage = "你拖放的是网页图象,图象将保存到PictureBox中"

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long,
ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long,
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'设置窗口大小、位置、顺序

Private Sub Form_Load()

'窗口的属性分别为:(请在设计窗口中定义)
'Form1.Height = 570
'Form1.Left = 150
'Form1.Top = 200
'Form1.Width = 570
'Form1.BackColor = &HFFFF00
'Form1.BorderStyle = 1
'Form1.OLEDropMode = 1 '使Form1可以接受OLE拖放
'Form1.ControBox=False

SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or
SWP_NOSIZE Or SWP_SHOWWINDOW
' 使用Windows API函数SetWindowPos将窗口设置为总在最前面以捕捉拖放操作
End Sub

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long,
Button As Integer, Shift As Integer, x As Single, y As Single) '拖放操作时发生
On Error Resume Next
Effect = vbDropEffectCopy
If Data.GetFormat(vbCFText) Then '拖放的是网页地址
MsgBox strWebSite + Data.GetData(vbCFText)
ElseIf Data.GetFormat(vbCFDIB) Then '拖放的是网页图象
MsgBox strWebImage
End If
End Sub

Private Sub Form_DblClick()
Unload Me '双击窗口时,退出程序
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer,
x As Single, y As Single)
ReleaseCapture
SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& '使窗口可以通过鼠标拖动
End Sub



OK,至此所有的工作都已完成,大家可以自己运行程序试一试,打开网页拖动 1 个超链接
到这个窗口,将通过 MsgBox 显示该超链接的地址,如果拖动是的一个图像,则显示是一
个图像。
这只是一个简单的例子,在此基础上进一步修改完善就可以运用到其他的许多方面 ,
这些就留给朋友自己去思考吧。程序在 VB6.0、Windows 98 下运行良好,如果大家对此还
有什么问题,请到 www.d1vb.com 来一起讨论。(对编辑的话:这是一个 VB 论坛,我总
上面)。
 
用Delphi5.0怎么实现防止从本程序EmbeddedWB 控件 中drag文本到其他程序中呢?
 
http://61.134.4.193:8080/friendmake/TxtBasket_src.rar
这个网址,现在不能用了啊
哪里还能下载一份呀?
或者能不能给我发一个mail?
wzca@sina.com
先谢了。
 
后退
顶部