Dateinamen per Drag and Drop

Zusammenfassung

Erweitern Sie Access-Formulare um die Möglichkeit, Dateinamen durch Ziehen der Datei auf ein Formular zu erfassen.

Techniken

VBA, Klassen, Subclassing, VB6

Voraussetzungen

Access 2000 und höher

Beispieldateien

DragDrop.mdb, DragDrop_AllInOne.mdbVBProjekt.zip

André Minhorst, Duisburg

Wenn Sie einen Dateinamen in einer Tabelle speichern oder diesen anderweitig in einer Access-Datenbank verwenden möchten, verwenden Sie den entsprechenden Dateidialog zur Auswahl der gewünschten Datei. Es gibt aber auch Lösungen, die vielleicht eine zusätzliche Variante anbieten möchten: Beispielsweise wäre das Ziehen und Ablegen der Datei aus dem Windows Explorer in ein passendes Textfeld eine sinnvolle Alternative – ganz so, wie Sie es auch mit dem Ausführen-Fenster von Windows tun können.

Häufig verwendet man ja sogar das Ausführen-Fenster (Windows-Startmenü/Ausführen), um schnell einen Dateinamen inklusive Pfad in die Zwischenablage zu befördern und anschließend weiterzuverwenden.

Wenn das in einer Anwendung öfter notwendig ist, kann das aber schnell nerven, denn dieses Fenster wird nicht wie die anderen Anwendungen in der Taskleiste angezeigt.

Also sorgen Sie für eine Alternative, die zwar eine DLL benötigt, aber dennoch das direkte Ziehen von Dateien in Access-Formulare und die dortige Weiterverwendung ermöglicht.

Die Funktionalität zum Erfassen von Dateinamen per Drag and Drop kann man in Access auf zwei Arten bereitstellen: Erstens können Sie die dazu notwendigen Module einfach in das VBA-Projekt der gewünschten Access-Datenbank integrieren. Zweitens können Sie eine .dll-Datei mit der Funktionalität erstellen und vom VBA-Projekt der entsprechenden Access-Datenbank aus referenzieren.

Erstere Variante verwendet Subclassing und das kommt sich gelegentlich mit dem VBA-Editor ins Gehege. Daher stellt Access im Unternehmen hier die Variante mit der .dll vor; die Alternative finden Sie allerdings in einer zusätzlichen Beispieldatenbank.

Die DLL können Sie wahlweise selbst erstellen (Visual Studio 6.0 vorausgesetzt) oder einfach der Heft-CD entnehmen und entsprechend registrieren.

DLL selbst erstellen

Wenn Sie die DLL selbst erstellen möchten, führen Sie einfach die folgenden Schritte durch:

Quellcode 1: Code der Klasse CDragDrop

Option Compare Text
Option Explicit
Private frm As Object
Private txt As Object
Public Event FileDropped(Filename As String)
Public Event ManyFilesDropped(Filenames As Variant)
Public Property Set Form(frmIn As Object)
    Set frm = frmIn
End Property
Public Property Set textbox(txtin As Object)
    Set txt = txtin
End Property
Public Sub SubClassHookForm()
    Call DragAcceptFiles(frm.hWnd, 1)
    lpPrevWndProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, _        AddressOf WindowProc)
    Set CDrag = Me
End Sub
Public Sub SubClassUnHookForm()
    Call SetWindowLong(frm.hWnd, GWL_WNDPROC, lpPrevWndProc)
    Call DragAcceptFiles(frm.hWnd, 0)
End Sub
Sub AcceptDroppedFiles(hDrop As Long)
    Dim lNumOfFiles As Long
    Dim lReturn As Long
    Dim sFilename As String
    Dim lm As Long
    Dim arrFiles() As String
    ''Anzahl der Dateien ermitteln
    lNumOfFiles = DragQueryFile(hDrop, GetNumOfFiles, 0&, 0)
    For lm = 0 To lNumOfFiles
        ''Variable für den Dateinamen vorbereiten
        sFilename = String$(257, 0)
        ''Dateiname ermitteln
        lReturn = DragQueryFile(hDrop, lm, sFilename, _            Len(sFilename))
        ''Dateiname zur Liste hinzufügen
        If lReturn > 0 Then
            sFilename = Trim(Left$(sFilename, _                InStr(1, sFilename, vbNullChar) - 1))
            txt.Text = txt.Text & sFilename & vbCrLf
        End If
        If lNumOfFiles = 1 And lm = 0 Then
            RaiseEvent FileDropped(sFilename)
        Else
            ReDim Preserve arrFiles(lm)
            arrFiles(lm) = sFilename
        End If
    Next lm
    If lNumOfFiles > 1 Then RaiseEvent _        ManyFilesDropped(arrFiles)
    ''Speicherplatz freigeben
    DragFinish hDrop
End Sub

Vorhandene DLL registrieren

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar