Scrollen bei Drag and Drop im TreeView

TreeView-Steuerelemente enthalten gelegentlich mehr Einträge, als gleichzeitig dargestellt werden können. Dank der Bildlaufleisten ist das kein Problem. Wenn Sie jedoch mit Drag and Drop arbeiten und einen Eintrag an eine Stelle verschieben möchten, die aktuell nicht sichtbar ist, stehen Sie auf dem Schlauch: Scrolling während Drag and Drop wird vom TreeView-Steuerelement nicht unterstützt. Mit diesem Beitrag rüsten wir dieses Feature nach.

Das TreeView-Steuerelement bietet schon eine Menge Features, aber an das Scrolling beim Ziehen von Elementen bis an den oberen oder unteren Rand heran hat man wohl nicht gedacht. Zum Glück gibt es Möglichkeiten, dieses Feature nachzurüsten. Die Prozedur aus Bild 1).

Listing 1: Füllen und Anpassen des TreeView-Steuerelements

Private Sub Form_Load()
    Dim i As Integer
    Dim j As Integer
    Dim objNode As MSComctlLib.Node
    Set objTreeView = Me!tvwScrolling.Object
    With objTreeView
        .Appearance = ccFlat
        .BorderStyle = ccNone
        .Font.Name = "Calibri"
        .Font.Size = "9"
        .LineStyle = tvwRootLines
        .OLEDragMode = ccOLEDragAutomatic
        .OLEDropMode = ccOLEDropManual
    End With
    For i = 1 To 10
        Set objNode = objTreeView.Nodes.Add(, , "a" & i, "Element " & i)
        objNode.Expanded = True
        For j = 1 To 10
            Set objNode = objTreeView.Nodes.Add("a" & i, tvwChild, "a" & i & "_" & j, _
            "Element " & i & "_" & j)
        Next j
    Next i
End Sub

pic001.png

Bild 1: TreeView-Steuerlement mit Testeinträgen

Damit wir die Ereignisse des TreeView-Steuerelements implementieren können, speichern wir einen Objektverweis in einer modulweit deklarierten Variable:

Dim WithEvents objTreeView As MSComctlLib.TreeView

Nach diesen Vorbereitungen stellt sich nun die Frage, wie sich das Scrollen realisieren lässt.

Dieses Problem lässt sich in zwei kleinere Probleme aufteilen: Wie bewegen wir das TreeView-Steuerelement dazu, seinen Inhalt zu scrollen und wie sorgen wir dafür, dass dies genau dann geschieht, wenn ein Element per Drag and Drop an den oberen beziehungsweise unteren Rand geführt wird

Scrolling per API

Die erste Teilaufgabe ist schnell erledigt. Dabei hilft uns die Windows-API mit dem Befehl SendMessage. Diese wird zunächst deklariert:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
     ByVal wParam As Long, lParam As Any) As Long

Um die Funktion dieser Anweisung bezüglich des Scrollens auszuprobieren, fügen Sie die Deklaration zunächst in ein Standardmodul ein und ersetzen das Schlüsselwort Private durch Public.

Um den Inhalt des TreeView-Steuerelements nach unten zu scrollen, verwenden Sie nun folgenden Aufruf der SendMessage-Funktion:

SendMessage Forms!frmScrolling!ctlTreeView.hwnd, 277&, 0&, vbNull

Für die andere Richtung ersetzen Sie im dritten Parameter die 0 durch den Wert 1:

SendMessage Forms!frmScrolling!ctlTreeView.hwnd, 277&, 1&, vbNull

Setzen Sie diese beiden Befehle im Direktbereich ab, um die Funktion auszuprobieren.

Drag and Drop mit Zeitgeber


Nur für Abonnenten

Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.

Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.

So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.

Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.

Bereits Abonnent? Hier einloggen


Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →

Schreibe einen Kommentar