在VB中实现拖放功能

Author: 杜伟 Date: 2001年 2期

    Windows资源管理器中使用文件的拖放可以很方便地对文件进行复制、移动,其实要实现拖放功能只要在VB中设置一下,写入几行代码就可以搞定!好了,下面我们就开始自己手动来实现这个功能吧。
      首先,新建一个工程。再加入一个Command1控件,将Caption属性设置为“我的拖放程序”,再将OLEDropMode设置为1(即Manual)即可实现拖放动能,当然要真正实现拖放的过程还得写入几行代码才行。
      下面就是实现拖放功能的代码:
      双击Command1控件,选择OLEDragDrop事件,代码如下:
      Private Sub Command1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)??
      If Data.GetFormat(vbCFText) = True Then
      Me.Caption = Data.GetData(vbCFText)??
      End If
      End Sub
      以上代码作用是将用户拖过来的文字显示在窗体中的标题栏(即Caption)中。单击“F5键”运行该程序,然后用写字板输入一句话,将文字全部选中,再将选中的文字拖动到Command1控件中,此时你将发现窗体中的标题栏中显示的就是拖动来的文字。
      以下代码是显示用户拖动过来的图片文件:
      首先,引入Picture1控件,其设置与Command1相同,将其OLEDropMode设置为1。然后双击Picture1控件,选择OLEDragDrop事件,输入以下代码:
      Private Sub Picture1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)??
      If Data.GetFormat(vbCFFiles)= True Then
      Picture1.Picture = LoadPicture(Data.Files.Item(1))?牐?
      End If
      End Sub
      单击“F5”键运行该程序,将图片文件拖动到Picture1控件中即可在Picture1中显示出该图片来。要注意的是:Picture1控件只能显示BMP、JPG、WMF、ICON文件,而GIF动画及PSD等文件格式无法显示。
      上面介绍如何接收拖动过来的文字及图片,下面介绍如何打开拖动过来的文件,且用与之关联的程序来打开。其代码如下:
      首先,引入Text1控件,将OLEDropMode设置为1。再新建一个模块,在Module1中输入以下代码:
      Public Declare Function ShellExecute Lib “shell32.dll” Alias “ShellExecuteA” ?煟˙yVal hwnd As Long, ByVal lpOperation As String,ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
      再双击Text1控件,选择OLEDragDrop事件,输入以下代码:
      Private Sub Text1_OLEDragDrop?烡ata As DataObject(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)??
      If Data.GetFormat(vbCFFiles) = True Then
      Dim GetFilePathStr As String
      Dim W
      Dim i As Integer
      If Data.Files.Count > 1 Then  '如果是拖放的多个文件则依次打开
      For i = 1 To Data.Files.Count
      GetFilePathStr = Data.Files.Item(i)??
      W = ShellExecute(0&, vbNullString, GetFilePathStr, vbNullString, vbNullString, vbNormalFocus)??
      Next
      Else  '如果只有一个文件
      GetFilePathStr = Data.Files.Item(1)??
      W = ShellExecute(0&, vbNullString, GetFilePathStr, vbNullString, vbNullString, vbNormalFocus)??
      End If
      End If
      End Sub
      单击“F5”键运行该程序,将任意一个文件拖放到Text1控件中,程序将启动相应的程序来打开它。如拖动MyFile.Doc文件到Text1控件中,程序将自动启动Word并打开该文件;如果我选择了多个文件并拖动到Text1控件中,程序将依次打开所选定的文件。
      如果你还有什么问题,欢迎来信与我交流。我的E-mail地址是:vber99@yeah.net.