| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 989 人关注过本帖
标题:文件~拖放~
只看楼主 加入收藏
b13690976754
Rank: 1
等 级:新手上路
威 望:2
帖 子:835
专家分:7
注 册:2006-11-9
结帖率:100%
收藏
 问题点数:0 回复次数:5 
文件~拖放~
请问下 怎么样把 一个音频格式的文件 从桌面添加到 File
搜索更多相关主题的帖子: 文件 
2007-03-09 18:56
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
添加到File...File是什么东西..

我的msn: myfend@
2007-03-09 18:58
b13690976754
Rank: 1
等 级:新手上路
威 望:2
帖 子:835
专家分:7
注 册:2006-11-9
收藏
得分:0 
回复:(b13690976754)文件~拖放~
图片附件: 游客没有浏览图片的权限,请 登录注册


If Dir(\"alive\") <> \"\" And Dir(\"ideal\") <> \" Then Print \"strive\" End If
2007-03-09 19:38
b13690976754
Rank: 1
等 级:新手上路
威 望:2
帖 子:835
专家分:7
注 册:2006-11-9
收藏
得分:0 
?

If Dir(\"alive\") <> \"\" And Dir(\"ideal\") <> \" Then Print \"strive\" End If
2007-03-10 23:55
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
file1.OLEdragmode = 1
file1.OLEdropmode = 1

是不是这个效果呢?

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-03-11 09:39
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 

拖放代码``

用文件拖放可以使我们方便的打开程序所支持的文件,比如我们直接把一首歌曲(mp3)从资源管理器Explore中直接拖放到我们自己写的多媒体播放器上,播放器就能得到放下的文件的路径,然后自动的打开它。这也是流行软件所常用的技巧。下面介绍的小程序,采用VB6所提供的OLE拖放功能,仅用十几行代码就实现了文件拖放。

  为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:
'------------------------------------------
' 采用OLE实现的文件的拖放
'------------------------------------------
' 洪恩在线 求知无限
'------------------------------------------
'程序说明:
'本例是实现文件从EXPLORE到VB应用程序拖放的又一种
'方法,与采用API函数实现的方法相比,这种方法更简
'单易懂。
'OLE拖放是可在 Visual Basic 应用程序中添加的最强
'大、最有用的功能之一就是在控件和控件之间、在控件
'和其它 Windows 应用程序之间拖动文本和图形。有了
'OLE,就可将这种功能引入到应用程序中。
'------------------------------------------

Option Explicit

Private Sub Form_Load()

'经过声明Picture1成为接受文件拖放的一个OLE容器
Picture1.OLEDropMode = 1
End Sub

Private Sub Picture1_OLEDragDrop(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single)
Dim i As Integer
'检查放下的东西是不是文件名
If data.GetFormat(vbCFFiles) = True Then

Dim sFileName$

'只读取第一条记录的信息
sFileName = data.Files(1)

'如果不是图片文件则转向错误处理
On Error GoTo invalidPicture

'依次读取各条记录,并把文件名添加在列表框中
For i = 1 To data.Files.Count
List1.AddItem data.Files(i)
Next i

'将图片显示在图片框中
Picture1.Picture = LoadPicture(sFileName)
End If

Exit Sub

invalidPicture:

'显示错误信息
DisplayPicture1Message

End Sub
Private Sub DisplayPicture1Message()

'清除图片框中的图片
Picture1.Picture = LoadPicture()

Const Msg As String = "Invalid Picture Format!"

' 在图片框中显示错误信息,这个用法很少见
Picture1.CurrentX = (Picture1.ScaleWidth \ 2) - (Picture1.TextWidth(Msg) \ 2)
Picture1.CurrentY = (Picture1.ScaleHeight \ 2) - (Picture1.TextHeight(Msg) \ 2)
Picture1.Print Msg
End Sub

'当鼠标拖着东西移过图片框时
Private Sub Picture1_OLEDragOver(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single, State As Integer)

'检查移过图片框的是不是文件(象“回收站”就不是文件)
If data.GetFormat(vbCFFiles) Then

'显示可以放下的图标,是带小加号的那种
effect = vbDropEffectCopy And effect
Else

'否则显示不可放下的图标,是圆圈加斜线那种
effect = vbDropEffectNone
End If

End Sub

'--------------------------OLE拖放简介-------------------------------------------------
'可在 Visual Basic 应用程序中添加的最强大、最有用的功能之一就是在控件和控件之
'间、在控件和其它 Windows 应用程序之间拖动文本和图形。有了 OLE,就可将这种功能
'引入到应用程序中。
'使用 OLE 拖放时,并不是把一个控件拖动到另一个控件并调用代码(象本章前面讨论的
'拖放一样);而是将数据从一个控件或应用程序移动到另一个控件或应用程序。例如,用
'户先选定并拖动 Excel 中的一列单元,然后将它们放到应用程序的 DBGrid 控件上。
'Visual Basic 的几乎所有控件都在某种程度上支持 OLE 拖放。(由 Visual Basic 专
'业版和企业版提供的)下述的标准控件和 ActiveX 控件自动支持 OLE 拖放,这意味着无
'论是从控件拖出还是在控件内放入都不需要编写代码:
'Apex DBGrid Picturebox Richtextbox
'Image Textbox Maskededitbox

'为对这些控件启动自动 OLE 拖放,应将 OLEDragMode 和 OLEDropMode 设置为“自动话”。
'---------------------------------------------------------------------------------------
'可用下列 OLE 拖放属性、事件和方法指定已知控件响应拖放的方式。
'类别 项目 描述

'属性 OLEDragMode 启动控件的自动拖动或手工拖动(若控件支持手工拖动但不支持自动 OLE 拖动,则它不具有此属性,但支持 OLEDrag 方法和 OLE 拖放事件)。
' OLEDropMode 指定控件如何响应放操作。
'事件 OLEDragDrop 识别源对象何时被放到控件上。
' OLEDragOver 识别源对象何时被拖动经过控件。
' OLEGiveFeedback 以源对象为基础向用户提供自定义拖动图标反馈。
' OLEStartDrag 在启动拖动时,源支持哪种数据格式和放效果(复制、移动或拒绝数据)。
' OLESetData 在放源对象时提供数据。
' OLECompleteDrag 当把对象放到目标时通知被执行的操作的源。
'方法 OLEDrag 启动手工拖动。
'----------------------------------------------------------------------------------------
'本例中用到的属性和方法:
'OLEDragMode -------返回或设置是由部件还是由程序员来处理 OLE 拖放操作。
'属性: 0 表示为手工拖放 1 表示为自动拖放
'我们设为 1 是自动拖放模式,这时我们要用OLEDragDrop,OLEDragOver事件来控制拖放操作
'
'OLEDragDrop -------当源部件决定放操作能发生,且源部件被放到目标部件时,此事件发生。
'语法:Private Sub object_OLEDragDrop(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single)
'OLEDragDrop 事件语法包含下面部分:
'部分 描述
'object 对象表达式,其值是“应用于”列表中的一个对象。
'data DataObject 对象,包含源提供的格式,另外也可能包含这些格式的数据。若 DataObject 不包含数据,则当控件调用 GetData 方法时提供数据。SetData 和 Clear 方法不能用在这里。
'effect 源对象设置的长整型数,用来识别执行的动作,这样当部件被移动后允许源采取适当的动作(例如,如果源被从一个部件移到另一个部件,则执行删除数据操作)。可能的取值列于“设置值”中。
'button 整数,当按下鼠标键时,与鼠标状态相对应。左键为位 0,右键为位 1,中键为位 2。这些位相应的值分别为 1,2 和 4,它代表了鼠标键的状态。可设置三个位中的部分、全部或根本不设置,相应地表明部分、全部按键被按下或没有按键按下。
'shift 整数,当按下 SHIFT、CTRL 和 ALT 键时,与这些键状态相对应。
' SHIFT 键为位 0,CTRL 键为位 1,ALT 键为位 2。这些位相应的值分别为 1,2 和 4,shift 参数代表了这些键的状态。可设置三个位中的部分、全部或根本不设置,相应地表明部分、全部按键被按下或没有按键按下。例如,同时按下 CTRL 和 ALT 键,shift 值为 6。CTRL
'x,y 确定鼠标指针当前位置的数值。x 和 y 值由对象的 ScaleHeight、ScaleWidth、ScaleLeft 和 ScaleTop 属性设置的坐标系统的格式来表示。
'--------------------------------------------------------------------------------------
'其中 effect 参数的设置如下:
'常数 值 描述

'vbDropEffectNone 0 放目标不接受数据。
'VbDropEffectCopy 1 放结果保存于从源到目标的数据拷贝中。初始数据没有被拖放操作改变。
'VbDropEffectMove 2 放结果保存于要从拖放源移到放源的数据中。移动后,拖放源要删除数据。
'---------------------------------------------------------------------------------------
'OLEDragOver -----------当一个部件在另一个部件上拖动时发生。
'其参数与OLEDragDrop的参数类似。
'---------------------------------------------------------------------------------------


  OLE拖放是可在 Visual Basic 应用程序中添加的最强大、最有用的功能之一,利用它可以在控件和控件之间、在控件和其它 Windows 应用程序之间拖动文本和图形。VB中的大部分控件都是支持OLE拖放,但默认状态下控件的OLEDropMode属性是设为0,也就是不允许拖放的。如果我们要使用OLE拖放,必须先把OLEDropMode属性设为1,这样控件才成为接受文件拖放的一个OLE容器。

  如下图所示:我们把PictureBox的OLEDropMode属性设为1,这样PictureBox就能够接受从WINDOWS资源管理器Explore或是其它程序中拖放的文件或图片。我们也可以在代码中设置这个属性。这就是上面源码框中Picture1.OLEDropMode = 1语句的含义。

  下面我们来看看本例中用到的OLE拖放的事件和方法。

  ●OLEDragDrop事件:意义是当控件允许放下的动作,并且有东西在控件上放下的时刻发生。当此事件发生时程序会去执行Sub object_OLEDragDrop()子过程的代码,所以我们必须在其中加入程序来响应此事件。在本例中,程序要判断放下东西的类型是不是图片文件,共有几个图片文件,然后在PictureBox中显示图片,并把文件的路径在列表框中列出来,总之我们可以根据自己的需要写这段代码。

  OLEDragDrop 事件的语法为:
   Sub object_OLEDragDrop(
       data As DataObject,  DataObject对象,包含放下的数据,具体的格式参见源码注释;
       effect As Long,    用来识别执行的动作; 
       button As Integer,   整数,与鼠标状态相对应。左键为0,右键1,中键2;
       shift As Integer,   整数,当按下SHIFT、CTRL和ALT键时,与这些键状态相对应;
       x As Single,      x,y 确定鼠标指针当前位置的数值;
       y As Single  )

  ●OLEDragOver事件:意义是当鼠标拖着东西在控件上移过时发生,当此事件发生时程序会去执行Sub object_OLEDragOver()子过程的代码,本例中我们用程序判断鼠标拖动的是不是文件,如果是则显示“允许放下”的鼠标指针,否则显示“禁止放下”的鼠标指针。

  用OLE实现文件拖放,代码简单易懂,而采用另外一种方法API函数实现起来就比较复杂,但是可以实现更加灵活的功能,有兴趣的话你也可以参照一下API实例解析中的相关内容。



佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-03-11 09:59
快速回复:文件~拖放~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019302 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved