Zmiana pozycji Scroll'a pionowego i poziomego dla ListView   strona główna:
A po co ten Excel ;-)
 
    Zadaniem na dziś jest programowe ustalenie pozycji Scrol'i dla kontrolki ListView. Powiedzmy że ładujemy do tej kontrolki jakiś  
spory zakres danych i chcielibyśmy żeby po załadowaniu danych były pokazane te z prawego dolnego rogu zakresu albo użytkownik   przykład do ściągnięcia
dowolnie przesuwa Scrol'e ręczenie. Co zrobić żeby przywrócić widok pierwotny (lewy górny róg)..   lvscroll.zip
    Samo przeniesienie danych do kontrolki jest dość proste i było już omawiane w tym dziale  
 
 
Private Sub UserForm_Initialize()  
    tbl2ListViwe Me.ListView1, [A1:O101], False  
End Sub  
 
 
 Sub tbl2ListViwe(objLV As MSComctlLib.ListView, _  
                  vDane As Variant, _  
                  Optional HDR As Boolean = True)  
     'Zakres danych do ListView  
     'http://www.apocotenexcel.pl/tbl2lv.htm  
                    
     Dim tbl As Variant, i As Long, j As Integer  
     tbl = vDane: i = LBound(tbl)  
           
     With objLV  
        .View = lvwReport  
 
         If Not HDR Then .HideColumnHeaders = True  
         For j = LBound(tbl, 2) To UBound(tbl, 2)  
             .ColumnHeaders.Add Text:=IIf(HDR, tbl(i, j), CStr(i))  
         Next  
         For i = IIf(HDR, i + 1, i) To UBound(tbl)  
             .ListItems.Add Text:=tbl(i, LBound(tbl, 2))  
             For j = LBound(tbl, 2) + 1 To UBound(tbl, 2)  
                 .ListItems(.ListItems.Count).SubItems(j - 1) = tbl(i, j)  
             Next  
         Next  
     End With  
 End Sub  
 
 
Do ustalenia pozycji Scroll'i potrzebna nam będzie Funkcja SendMessage (API). Pierwszym arg. Tej funkcji jest uchwyt do obiektu  
gdyby tym obiektem była jakaś kontrolka z MsForms (np.: ComboBox, ListBox) zadanie byłoby niewykonalne przez fakt, że te nie  
posiadają uchwytu. :-( w przeciwieństwie do ListView :-)  
    W części deklaracji kodu UserForm'a dodajemy więc..  
 
 
Option Explicit  
 
Private Declare Function SendMessage _  
    Lib "user32.dll" _  
    Alias "SendMessageA" ( _  
        ByVal winHandle As Long, _  
        ByVal wMsg As Long, _  
        ByVal wParam As Long, _  
        ByVal lParam As Long) As Long  
 
Private Const WM_VSCROLL = &H115  
Private Const WM_HSCROLL = &H114  
 
Private Const SB_LINERIGHT = 1  
Private Const SB_LINELEFT = 0  
Private Const SB_PAGELEFT = 2  
Private Const SB_PAGERIGHT = 3  
Private Const SB_RIGHT = 7  
Private Const SB_LEFT = 6  
 
Private Const SB_PAGEDOWN = 3  
Private Const SB_PAGEUP = 2  
Private Const SB_LINEUP = 0  
Private Const SB_LINEDOWN = 1  
Private Const SB_BOTTOM = 7  
Private Const SB_TOP = 6  
 
 
Co tu wyjaśniać :-)  
    WM_VSCROLL - scroll Pionowy  
    WM_HSCROLL - scroll Poziomy  
    SB_LINE* - przesunięcie o jedną "linię". Odpowiada to jednemu naciśnięciu klawisza strzałek gdy kontrolka jest aktywna  
    SB_PAGE* - więkrze przesunięci  
    SB_* (RIGHT,LEFT,TOP,BOTTOM) - przesunięcie do końca w określonym kierunku.  
 
Reszta prosta :-)  
 
 
 
Private Sub cmdRIGHT_Click()  
    SendMessage Me.ListView1.hWnd, WM_HSCROLL, SB_PAGERIGHT, 0  
End Sub  
 
Private Sub cbDOWN_Click()  
    SendMessage Me.ListView1.hWnd, WM_VSCROLL, SB_PAGEDOWN, 0  
End Sub  
 
Private Sub cbDOWNend_Click()  
    SendMessage Me.ListView1.hWnd, WM_VSCROLL, SB_BOTTOM, 0  
End Sub  
 
Private Sub cbDOWNline_Click()  
    SendMessage Me.ListView1.hWnd, WM_VSCROLL, SB_LINEDOWN, 0  
End Sub  
 
Private Sub cbLEFTline_Click()  
    SendMessage Me.ListView1.hWnd, WM_HSCROLL, SB_LINELEFT, 0  
End Sub  
 
Private Sub cbRIGHTend_Click()  
    SendMessage Me.ListView1.hWnd, WM_HSCROLL, SB_RIGHT, 0  
End Sub  
 
Private Sub cbRIGHTline_Click()  
    SendMessage Me.ListView1.hWnd, WM_HSCROLL, SB_LINERIGHT, 0  
End Sub  
 
Private Sub cbUP_Click()  
    SendMessage Me.ListView1.hWnd, WM_VSCROLL, SB_PAGEUP, 0  
End Sub  
 
Private Sub cbUPend_Click()  
    SendMessage Me.ListView1.hWnd, WM_VSCROLL, SB_TOP, 0  
End Sub  
 
Private Sub cbUPline_Click()  
    SendMessage Me.ListView1.hWnd, WM_VSCROLL, SB_LINEUP, 0  
End Sub  
 
Private Sub cmdLEFT_Click()  
    SendMessage Me.ListView1.hWnd, WM_HSCROLL, SB_PAGELEFT, 0  
End Sub  
 
Private Sub cmLEFTend_Click()  
    SendMessage Me.ListView1.hWnd, WM_HSCROLL, SB_LEFT, 0  
End Sub