home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / Drag_To_Ex215183582009.psc / forms / frmMain.frm
Text File  |  2009-05-08  |  6KB  |  175 lines

  1. VERSION 5.00
  2. Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
  3. Begin VB.Form frmMain 
  4.    Caption         =   "Form1"
  5.    ClientHeight    =   4440
  6.    ClientLeft      =   1125
  7.    ClientTop       =   420
  8.    ClientWidth     =   4530
  9.    BeginProperty Font 
  10.       Name            =   "Tahoma"
  11.       Size            =   8.25
  12.       Charset         =   0
  13.       Weight          =   400
  14.       Underline       =   0   'False
  15.       Italic          =   0   'False
  16.       Strikethrough   =   0   'False
  17.    EndProperty
  18.    LinkTopic       =   "Form1"
  19.    ScaleHeight     =   4440
  20.    ScaleWidth      =   4530
  21.    Begin MSComctlLib.ListView lvw 
  22.       Height          =   4215
  23.       Left            =   120
  24.       TabIndex        =   0
  25.       Top             =   120
  26.       Width           =   4335
  27.       _ExtentX        =   7646
  28.       _ExtentY        =   7435
  29.       LabelWrap       =   -1  'True
  30.       HideSelection   =   -1  'True
  31.       OLEDropMode     =   1
  32.       _Version        =   393217
  33.       ForeColor       =   -2147483640
  34.       BackColor       =   -2147483643
  35.       BorderStyle     =   1
  36.       Appearance      =   1
  37.       OLEDropMode     =   1
  38.       NumItems        =   0
  39.    End
  40. End
  41. Attribute VB_Name = "frmMain"
  42. Attribute VB_GlobalNameSpace = False
  43. Attribute VB_Creatable = False
  44. Attribute VB_PredeclaredId = True
  45. Attribute VB_Exposed = False
  46. Option Explicit
  47. Public DroppedFolder As String
  48.  
  49. Private Const VER_PLATFORM_WIN32_NT As Long = 2
  50.  
  51. Private Type OSVERSIONINFO
  52.   OSVSize As Long
  53.   dwVerMajor As Long
  54.   dwVerMinor As Long
  55.   dwBuildNumber As Long
  56.   PlatformID As Long
  57.   szCSDVersion As String * 128
  58. End Type
  59.  
  60. Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
  61.                                       (lpVersionInformation As Any) As Long
  62.  
  63.  
  64. Private Sub Form_Load()
  65.   Dim a As Integer
  66.   For a = 1 To 10
  67.     lvw.ListItems.Add , "Key:" & a, "Text:" & a
  68.   Next a
  69.   lvw.View = lvwList
  70.   lvw.OLEDragMode = ccOLEDragAutomatic
  71.  
  72.   'don't know if it's just being dumb, but the SHCNE stuff doesn't work for the first few seconds when
  73.   'running in Windows Vista VB6 IDE.  must wait for the SHCNE_UPDATEDIR message to show up.  so i disable the
  74.   'listview until we receive that message to prevent me from freaking out when it doesn't work...
  75.   If IsWinVistaIDE = True Then lvw.Enabled = False
  76.  
  77.   If SubClass(hwnd) Then
  78.     Call SHNotify_Register(hwnd)
  79.   End If
  80. End Sub
  81.  
  82. Public Sub NotificationReceipt(wParam As Long, lParam As Long)
  83.   Static LastDroppedFile As String
  84.   Dim shns As SHNOTIFYSTRUCT
  85.   Dim dwItem As Long
  86.   Dim DroppedFile As String
  87.   Dim DroppedFileName As String
  88.  
  89.   CopyMemory shns, ByVal wParam, Len(shns)
  90.   Select Case lParam
  91.     Case SHCNE_UPDATEDIR  'under Vista VB6 IDE, all the SHCNE stuff seems to not work for a few seconds until this message pops up.
  92.       lvw.Enabled = True
  93.     Case SHCNE_CREATE, SHCNE_RENAMEITEM
  94.       'using Vista, SHCNE_CREATE is what we see.  only uses .dwItem1...
  95.       'using XP, SHCNE_RENAMEITEM is what we see.  the path we're interested resides in .dwItem2...
  96.       dwItem = IIf(lParam = SHCNE_RENAMEITEM, shns.dwItem2, shns.dwItem1)
  97.       'TempFileName --- just the temp file name
  98.       'TempFile --- the full path and name of the temp file in the temp folder
  99.       'DroppedFileName --- just the file name of the dropped file
  100.       'DroppedFile --- the full path and name of the temp file in it's new dropped location
  101.       'GetDisplayNameFromPIDL(shns.dwItem1) --- just the file name
  102.       'GetPathFromPIDL(shns.dwItem1) --- the full path and name of the temp file in it's new dropped location
  103.       DroppedFile = GetPathFromPIDL(dwItem)
  104.       DroppedFileName = GetDisplayNameFromPIDL(dwItem)
  105.       Debug.Print "DoppedFile = " & DroppedFile & vbCrLf & vbCrLf & "DroppedFileName = " & DroppedFileName
  106.       'Exit Sub
  107.       If shns.dwItem1 And _
  108.          DroppedFileName = TempFileName And _
  109.          TempFile <> DroppedFile Then
  110.         'our temp file was moved from it's temp folder.  this is the meat and potatoes...
  111.         If LastDroppedFile = DroppedFile Then Exit Sub
  112.         LastDroppedFile = DroppedFile
  113.         DroppedFolder = PathFromFile(DroppedFile)
  114.         Call RecycleFile(DroppedFolder & DroppedFileName)
  115.       End If
  116.   End Select
  117. End Sub
  118.  
  119. Public Function PathFromFile(ByVal this As String) As String
  120.   PathFromFile = Left(this, InStrRev(this, "\"))
  121. End Function
  122.  
  123. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  124.   Call SHNotify_Unregister
  125.   Call UnSubClass(hwnd)
  126. End Sub
  127.  
  128. Private Function IsFile(ByVal Path As String) As Boolean
  129.   On Error GoTo hell:
  130.   Dim fso
  131.   If Right(Path, 1) = "\" Then Path = Left(Path, Len(Path) - 1)
  132.   Set fso = CreateObject("Scripting.FileSystemObject")
  133.   IsFile = fso.GetFile(Path) <> ""
  134. hell:
  135.   Set fso = Nothing
  136. End Function
  137.  
  138. Private Sub lvw_OLECompleteDrag(Effect As Long)
  139.   If DroppedFolder = "" Then Exit Sub
  140.   Call MsgBox("The target folder you dragged your listitem to is:" & vbCrLf & vbCrLf & DroppedFolder & vbCrLf & vbCrLf & "From here, you can do whatever you want with it.  For example, if you write an FTP client, you can transfer a file to this folder.  This is just one useful example...", vbInformation, "DroppedFolder")
  141.   'cleanup
  142.   DroppedFolder = ""
  143.   'DroppedFile = ""
  144.   'DroppedFileName = ""
  145.   TempFile = ""
  146.   TempFileName = ""
  147. End Sub
  148.  
  149. Private Sub lvw_OLESetData(Data As MSComctlLib.DataObject, DataFormat As Integer)
  150.   Data.Files.Add CreateTempFile
  151. End Sub
  152.  
  153. Private Sub lvw_OLEStartDrag(Data As MSComctlLib.DataObject, AllowedEffects As Long)
  154.   DroppedFolder = ""
  155.   AllowedEffects = vbDropEffectMove Or vbDropEffectCopy
  156.   Data.SetData , 15
  157. End Sub
  158.  
  159. Private Function IsWinVistaIDE() As Boolean
  160.   On Error Resume Next
  161.   'returns True if running Windows Vista
  162.   Dim osv As OSVERSIONINFO
  163.  
  164.   osv.OSVSize = Len(osv)
  165.   If GetVersionEx(osv) = 1 Then
  166.     If (osv.PlatformID = VER_PLATFORM_WIN32_NT) And (osv.dwVerMajor = 6) Then
  167.       Debug.Print 1 / 0
  168.       If Err.Description <> "" Then
  169.         IsWinVistaIDE = True
  170.       End If
  171.     End If
  172.   End If
  173. End Function
  174.  
  175.