MyApp has a subform with a list of files in a folder on the local HD.
Currently I have buttons that opens the file using a Shell() command.
The Users want to be able to drag files out of the list (on the subform in
Access) and into other programs (like Notepad or Word), and have them open
just like you dragged a file there out of windows explorer.
I downloaded modules that “expose that Windows API” before, I’m assuming
this will be of those, but I sure don’t know how to write one.
AHA TIA
roger
You may have to settle for copying to the clipboard and pasting into the
other program.
--
Doug Steele, Microsoft Access MVP
http://I.Am/DougSteele
(no e-mails, please!)
"roger" <ro...@discussions.microsoft.com> wrote in message
news:EDAFA596-A73A-46FC...@microsoft.com...
While I realize I cant do it simple Access controls, Drag and Drop is a core
Windows technoloy. Access recieves drag and drop, it got to be in there
someplace.
And if not the Windows API, then how about OLE? Will an OLE control support
drag and drop? and can I control it in VBA?
Or how about a Custom control? (do we still call them ActiveX controls?) VB
applets support drag and drop. Can I make a custom OCX control in VB and
embed that on an Access form?
There's got to be a way...
"Douglas J. Steele" wrote:
> .
>
Doug's response gave me an idea. Although I don't have time to hack this out
completely, I can hopefully inspire you to attempt a solution. First you'll
need some way of copying and pasting text:
http://www.smccall.demon.co.uk/MiscApi.htm#Clipboard
Then use a control's MouseDown event to set a module level variable (say
Dragging As Boolean)
In the control's MouseMove event, if Dragging is True, detect when the mouse
cursor is inside the coordinates of the target app. On MouseUp, "drop" the
file (paste it from the clipboard), and reset the Dragging flag.
I can't remember all of the api you'll need offhand, but either you can find
it or maybe someone else on here might be able to jump in with that...
I've simulated drag and drop in Access before, but that isn't my goal. The
goal here is to actually use Windows drag and drop, and not have to write
custom procedures for every app the user could drop on. (just let windows do
it)
If it helps I'm using MSA 2007 which totally supports drag and drop, you can
drag tables and queries out to excel or word, and drop excel ranges in as
tables, so it IS in there.
If there is really NO way to do it in a form, then I am thinking that a
custom control is the answer. (I can't write one, but I would pay to have it
written) just a transparent button with three events, click, double click and
drag, and programmable value. With no other to drag data out of an Access
app, maybe I could sell the control.
Damn this is fustrating, from what I read, in .Net, this is as simple as
setting .DragBehavoir = enabled.
Have a look at this article:
http://www.devx.com/vb/Article/7864/1954
or try asking on the "microsoft.public.vb.general.discussion" group how you
drag from a VB ListView control to achieve this.
HTH
"roger" <ro...@discussions.microsoft.com> wrote in message
news:94992A3D-6897-4A02...@microsoft.com...
Option Compare Database
Option Explicit
Const vbCFFIles = 15
Const vbCFText = 1
Dim lCurX, lCurY As Single
Private Sub Form_Load()
Dim lstitem As ListItem
Set lstitem = ListView0.Object.ListItems.Add()
lstitem.Text = "Sample.txt"
lstitem.Key = "Fullpath\Sample.txt"
End Sub
Private Sub ListView0_MouseDown(ByVal Button As Integer, ByVal Shift As
Integer, ByVal x As Long, ByVal y As Long)
lCurX = x
lCurY = y
End Sub
Private Sub ListView0_MouseMove(ByVal Button As Integer, ByVal Shift As
Integer, ByVal x As Long, ByVal y As Long)
If Button = 1 Then
ListView0.OLEDrag
End If
End Sub
Private Sub ListView0_OLEStartDrag(Data As Object, AllowedEffects As Long)
On Error GoTo ListView0_OLEStartDrag_Err
Dim oDrag As ListItem
Set oDrag = ListView0.HitTest(lCurX, lCurY)
If oDrag Is Nothing Then
AllowedEffects = ccOLEDropEffectNone
Else
AllowedEffects = ccOLEDropEffectCopy
Call Data.SetData(oDrag.Text, vbCFText)
Call Data.SetData(, vbCFFIles)
Call Data.Files.Add(oDrag.Key)
End If
Exit Sub
ListView0_OLEStartDrag_Exit:
Exit Sub
ListView0_OLEStartDrag_Err:
MsgBox Err.Number & ": " & Err.Description
Resume ListView0_OLEStartDrag_Exit
End Sub
HTH
"roger" <ro...@discussions.microsoft.com> wrote in message
news:B5A2A13B-5B9A-4BA1...@microsoft.com...
I'll let you know
roger
"Jon Lewis" wrote:
> .
>
I think you'll find that's going to be your issue: the native Access
controls don't allow drag-and-drop, and using anything other than the native
Access controls means you won't be able to bind.
--
Doug Steele, Microsoft Access MVP
http://I.Am/DougSteele
(no e-mails, please!)
"roger" <ro...@discussions.microsoft.com> wrote in message
news:6DE4CDCD-8B98-4BB3...@microsoft.com...
Only thing is I'm not using a .Listview control. The article said that other
VB6 controls; picturebox, image, and textbox, all support OLE drag and drop.
But I don't have any of them in Access.
Am I missing something? Can I add those controls?
roger
"Jon Lewis" wrote:
> .
>
As Douglas says, a ListView control can't be bound to data but it's pretty
easy to populate and refresh with a list of files say in a directory or from
a recordset. (My example just loads one sample 'item' to the list view - you
would loop through a recordset adding all the relevent items.)
Additionally, you can choose the view for the ListView (like a Windows
folder). You can display an icon for each item in the list (use the
ImageList Common Control to store them) which may be able to take the place
of the image control and more than one column for each item.
Unless I've misunderstood your requirements, you would look to replace your
subform with the ListView, a ListView item replacing each record of the
subform . Quite a lot of coding required but very doable.
HTH
"roger" <ro...@discussions.microsoft.com> wrote in message
news:6959FEF2-C41F-4B7D...@microsoft.com...