[VB6]Listview scrollbar in het midden positioneren

Pagina: 1
Acties:

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17:31
Hallo allemaal, ik heb in vb6 een listview gemaakt met daarin een aantal kolommen. Nu wil ik graag dat als het formulier geopend wordt dat dan de listview de middelste kolom laat zien (dat is de huidige maand). Hiervoor heb ik de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim si As SCROLLINFO
Dim lReturn As Long
  
  'Vul si object
  si.cbSize = Len(si)
  si.fMask = SIF_ALL

  'Haal scroll info op
  lReturn = GetScrollInfo(lstvBelasting.hwnd, 0, si)
  
  If lReturn = 0 Then
    MsgBox "Fout tijdens het ophalen van de scrollbar info!", vbCritical, "Fout"
  Else
    'MsgBox "Min: " & si.nMin & " Max: " & si.nMax & " Pos: " & si.nPos
    'zet scroll bar in het midden
    si.nPos = (si.nMax - (si.nPage - 1)) / 2
    SetScrollInfo lstvBelasting.hwnd, 0, si, True
    'stuur message om kolommen te updaten
    SendMessage lstvBelasting.hwnd, WM_VSCROLL, SB_THUMBPOSITION Or (&H10000 * si.nPos), ByVal 0&
  End If


en als ik dit probeer wordt de scroll bar ook netjes in het midden gepositioneerd. Alleen de kolommen worden niet geupdate. Die blijven dus aan het begin staan.
Ik dacht dat op te kunnen lossen met bovenstaande SendMessage maar dat werkt niet. Heeft iemand anders een idee over hoe ik dit op zou kunnen lossen of wat ik fout doe.

Ik heb al wel gezocht maar kan over dit probleem geen informatie vinden.

Hail to the king baby!


  • Exterazzo
  • Registratie: Mei 2000
  • Nu online

Exterazzo

Qeasy

Het is al lang geleden dat ik iets in VB6 heb gedaan en misschien denk ik te makkelijk, maar kun je niet gewoon ook de selectedindex van de listitems aanpassen?

Audentia


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17:31
Exterazzo schreef op woensdag 06 december 2006 @ 13:28:
Het is al lang geleden dat ik iets in VB6 heb gedaan en misschien denk ik te makkelijk, maar kun je niet gewoon ook de selectedindex van de listitems aanpassen?
Nee, want ik wil niet een rij selecteren maar een bepaalde kolom. Dus ik wil de positie van de horizontale scrollbar beinvloeden, niet de verticale.

[edit]
Na de post hierboven heb ik nog wat gezocht en kwam ik hetvolgende tegen:

Google Groups linkje

Aan de hand hiervan heb ik de code zo gemaakt:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  'Vul si object
  si.cbSize = Len(si)
  si.fMask = SIF_ALL

  'Haal scroll info op
  lReturn = GetScrollInfo(lstvBelasting.hwnd, 0, si)
  
  If lReturn = 0 Then
    MsgBox "Fout tijdens het ophalen van de scrollbar info!", vbCritical, "Fout"
  Else
    'MsgBox "Min: " & si.nMin & " Max: " & si.nMax & " Pos: " & si.nPos
    'Bereken midden positie
    lPos = (si.nMax - (si.nPage - 1)) / 2
    
    'stuur message om kolommen te updaten
    If si.nPos > lPos And si.nPos < si.nMax Then
      'Positie is groter dan lPos maar kleiner dan max dus scrollen rechts naar midden
      SendMessage lstvBelasting.hwnd, LVM_SCROLL, (si.nPos - lPos) * -1, 0
    ElseIf si.nPos < lPos And si.nPos > 0 Then
      'Positie is niet 0 maar kleiner dan nPos  dus lPos - si.nPos posities scrollen
      SendMessage lstvBelasting.hwnd, LVM_SCROLL, lPos - si.nPos, 0
    ElseIf si.nPos = 0 Then
      SendMessage lstvBelasting.hwnd, LVM_SCROLL, lPos, 0
    End If
  End If


de LVM_SCROLL message zorgt ervoor dat de scrollbar en de kolommen goed gezet worden, Exterazzo in ieder geval bedankt voor je hulp, al was het niet helemaal zoals je denk ik bedoelt had :D

[ Voor 64% gewijzigd door urk_forever op 06-12-2006 16:08 ]

Hail to the king baby!