Platforms to show: All Mac Windows Linux Cross-Platform
Required plugins for this example: MBS Win Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Win/Drag and Drop/File Drop
This example is the version from Thu, 31th Jul 2019.
Project "File Drop.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Löschen"
Const kFileQuit = "Beenden"
Const kFileQuitShortcut = ""
End Class
MenuBar MenuBar1
MenuItem FileMenu = "&Ablage"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Bearbeiten"
MenuItem EditUndo = "&Rückgängig"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "&Ausschneiden"
MenuItem EditCopy = "&Kopieren"
MenuItem EditPaste = "&Einfügen"
MenuItem EditClear = "#App.kEditClear"
MenuItem UntitledMenu0 = "-"
MenuItem EditSelectAll = "&Alles auswählen"
End MenuBar
Class FileDropWindow Inherits Window
Control List Inherits Listbox
ControlInstance List Inherits Listbox
End Control
EventHandler Sub Open()
w = new FileDropTarget
dim e as integer = w.AttachToWindow(Self)
System.DebugLog "AttachToWindow: "+str(e)
End EventHandler
Property w As FileDropTarget
End Class
Class FileDropTarget Inherits WindowsDropTargetMBS
EventHandler Function DragEnter(dataObject as WinDataObjectMBS, keystate as integer, x as integer, y as integer, byref effect as integer) As integer
// does the dataobject contain data we want?
allowed = dataObject.hasPaths
if allowed then
// allow it
effect = DROPEFFECT_COPY
else
// deny
effect = DROPEFFECT_NONE
end if
Return S_OK
End EventHandler
EventHandler Function DragLeave() As integer
return S_OK
End EventHandler
EventHandler Function DragOver(keystate as integer, x as integer, y as integer, byref effect as integer) As integer
if allowed then
// allow it
effect = DROPEFFECT_COPY
else
// deny
effect = DROPEFFECT_NONE
end if
Return S_OK
End EventHandler
EventHandler Function Drop(dataObject as WinDataObjectMBS, keystate as integer, x as integer, y as integer, byref effect as integer) As integer
System.DebugLog "Inside drop event "+str(allowed)
if allowed then
// allow it
effect = DROPEFFECT_COPY
FileDropWindow.List.DeleteAllRows
dim files(-1) as FolderItem = dataObject.GetPaths
for each f as FolderItem in files
// we got a file you can use like any other file (e.g. copy)
FileDropWindow.List.AddRow "Path """+f.NativePath+""""
next
dim des(-1) as WindowsFileDescriptorMBS = dataObject.GetFileDescriptors
for each d as WindowsFileDescriptorMBS in des
// we got file descriptions. Some metadata and the data. No path.
dim data as string = dataObject.GetFileContents(0)
FileDropWindow.List.AddRow "File """+d.FileName+""" with "+str(lenb(data))+" bytes data."
next
else
// deny
effect = DROPEFFECT_NONE
end if
Return S_OK
End EventHandler
Property allowed As Boolean
End Class
End Project
See also:
- /Win/Drag and Drop/Attachment Drop from Outlook
- /Win/Drag and Drop/File Drag
- /Win/Drag and Drop/File Drag Multi
- /Win/Drag and Drop/Folder Drag
- /Win/Drag and Drop/Picture Drag
- /Win/Drag and Drop/Picture Drag with Mask
- /Win/Drag and Drop/Picture Drop
- /Win/Drag and Drop/Picture Drop on control
- /Win/Drag and Drop/Text Drag
- /Win/Drag and Drop/Text Drop
The items on this page are in the following plugins: MBS Win Plugin.