Hi,
ein Buch... hmmm eigentlich ne gute Idee
Zu dem Scroll:
(allerdings nicht ganz API frei)
' API Deklarationen
Private Const WM_HSCROLL = &H114
Private Const WM_VSCROLL = &H115
Private Const SB_LINELEFT = 0
Private Const SB_LINERIGHT = 1
Private Const SB_LINEUP = 0
Private Const SB_LINEDOWN = 1
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
Private Sub lsvListView_OLEDragOver(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, Shift As Integer, _
x As Single, y As Single, state As Integer)
Dim oItem As ListItem
Debug.Print "OLEDragOver x: " & x & " y: " & y
If lsvListView.View = lvwReport Then
' In der Reportansicht mit EnsureVisible den ScrollEffekt erzeugen
Set oItem = lsvListView.HitTest(x, y)
If Not oItem Is Nothing Then
Debug.Print "OLEDragOver " & oItem.Index
oItem.EnsureVisible
End If
Else
' Ansonsten das ganze einfach manuell machen!
If y > lsvListView.Height - 200 Then
' Scroll nach unten
Debug.Print "ScrollDown"
Call SendMessage(lsvListView.hwnd, WM_VSCROLL, SB_LINEDOWN, ByVal 0&)
ElseIf y < 200 Then
' Scroll nach oben
Debug.Print "ScrollUp"
Call SendMessage(lsvListView.hwnd, WM_VSCROLL, SB_LINEUP, ByVal 0&)
ElseIf x > lsvListView.Width - 200 Then
Debug.Print "ScrollRight"
Call SendMessage(lsvListView.hwnd, WM_HSCROLL, SB_LINERIGHT, ByVal 0&)
ElseIf x < 200 Then
Debug.Print "ScrollRight"
Call SendMessage(lsvListView.hwnd, WM_HSCROLL, SB_LINELEFT, ByVal 0&)
End If
End If
End Sub Mit der DragOver Methode scrollst Du überall hin....-)
Die Sache mit dem Visible Idem Count ist beim ListView sone Sache... Hier Ist zumindest eine Funktion die in diese Richtung geht.
' SendMessage API (sieheOben)
'Private Const LVM_FIRST As Long = &H1000
'Private Const LVM_GETCOUNTPERPAGE As Long = (LVM_FIRST + 40)
Public Function LSV_GetVisibleCount(oLSV As MSComctlLib.ListView) As Long
'--------------------------------------------------
' Gibt die maximal mögliche Anzahl der sichtbaren Items in dem
' ListView zurück. Allerdings wird im View Icon & SmallIcon
' Immer die anzahl aller ListItems zurückgegeben. Im View
' List & Report wird dagegen die maximale mögliche Anzahl an Items
' auf einer 'Seite' zurückgegeben.
LSV_GetVisibleCount = SendMessage(oLSV.hwnd, _
LVM_GETCOUNTPERPAGE, _
0&, _
ByVal 0&)
'--------------------------------------------------
End Function Grüße aus der Wüste
Tolwyn |