vb Drag & Drop in TreeVew: kein Scrollen

19/11/2007 - 19:35 von Jens Müller | Report spam
Hallo,

ich nutze TreeView.Drag vbBeginDrag und das Ereignis TreeView_DragDrop
um einen Knoten von einem Vaterknoten zum anderen verschieben zu
können.

Das klappt soweit auch gut, nur wenn das TreeView Scrolleisten hat, und
man den Knoten weit nach unten verschieben möchte, scrollt er nicht
automatisch so wie man es z.B. vom Explorer kennt.

Wenn ich hingegen Objekte aus anderen Anwendungen per OleDragDrop
empfange, dann wird gescrollt.

Unterstützt das VB-Dragdrop kein automatisches Scrollen?

Danke,
Jens
 

Lesen sie die antworten

#1 Ahmed Martens
20/11/2007 - 08:41 | Warnen spam
Hallo Jens,

Am Mon, 19 Nov 2007 19:35:07 +0100 schrieb Jens Müller:

Hallo,

ich nutze TreeView.Drag vbBeginDrag und das Ereignis TreeView_DragDrop
um einen Knoten von einem Vaterknoten zum anderen verschieben zu
können.

Das klappt soweit auch gut, nur wenn das TreeView Scrolleisten hat, und
man den Knoten weit nach unten verschieben möchte, scrollt er nicht
automatisch so wie man es z.B. vom Explorer kennt.

Wenn ich hingegen Objekte aus anderen Anwendungen per OleDragDrop
empfange, dann wird gescrollt.

Unterstützt das VB-Dragdrop kein automatisches Scrollen?



das musst Du leider alles manuell machen. Im INet hatte ich hierfür mal
ein sehr gutes Beispiel gefunden.

Im Modulkopf:

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

'-Scrollen Treeview
Dim mfX As Single
Dim mfY As Single
Dim moNode As Node
Dim m_iScrollDir As Integer 'Which way to scroll
Dim blnScroll_Listview As Boolean 'links/rechts führt click aus =>
wird übersprungen


In einem Timer:
Set TreeRegister.DropHighlight = TreeRegister.HitTest(mfX, mfY)
If m_iScrollDir = -1 Then 'Scroll Up
' Send a WM_VSCROLL message 0 is up and 1 is down
SendMessage TreeRegister.hWnd, 277&, 0&, vbNull
Else 'Scroll Down
SendMessage TreeRegister.hWnd, 277&, 1&, vbNull
End If

In dem TreeRegister.DragOver-Evennt:
mfX = x
mfY = y
If y > 0 And y < 200 Then 'scroll up
m_iScrollDir = -1
Timer1.Enabled = True
ElseIf y > (TreeRegister.Height - 200) And y < TreeRegister.Height
Then
'scroll down
m_iScrollDir = 1
Timer1.Enabled = True
Else
Timer1.Enabled = False
End If

Ich hoffe das war es. Ist nàmlich schon lange her, dass ich das
eingebaut hatte.

Suche mal auf den einschlàgigen Seiten.

Gruß Ahmed
Antworten bitte nur in der Newsgroup.

Ähnliche fragen