Analizando el codigo veo que solo lo hace en un caso es un bug o me parece
METHOD VScroll( nWParam, nLParam ) CLASS TXBrowse
local nScrHandle := nLParam
local nScrollCode := nLoWord( nWParam )
local nPos := nHiWord( nWParam )
local nRow, nBook
if GetFocus() != ::hWnd
SetFocus( ::hWnd )
endif
if nScrHandle == 0 .and. ::oVScroll != nil
do case
case nScrollCode == SB_LINEUP
::GoUp()
case nScrollCode == SB_LINEDOWN
::GoDown()
case nScrollCode == SB_PAGEUP
::PageUp()
case nScrollCode == SB_PAGEDOWN
::PageDown()
case nScrollCode == SB_TOP
::GoTop()
case nScrollCode == SB_BOTTOM
::GoBottom()
case nScrollCode == SB_THUMBPOSITION
if ::nLen < 1
return nil
endif
do case
case nPos == 1
::GoTop()
case nPos == ::oVScroll:GetRange()[ 2 ]
::GoBottom()
otherwise
::CancelEdit()
nRow := ::nRowSel
CursorWait()
//Eval( ::bSkip, ::VGetThumbPos( nPos ) - ::VGetPos() )
Eval( ::bKeyNo, ::VGetThumbPos( nPos ), Self )
CursorArrow()
nBook := Eval( ::bBookMark )
do while nRow > 0 .and. Eval( ::bSkip, -1 ) == -1
nRow--
enddo
::nRowSel := ::nRowSel - nRow
Eval( ::bBookMark, nBook )
if ::bChange != nil
Eval( ::bChange, Self, .t. )
endif
::VThumbPos( nPos )
::lRefreshOnlyData := .f.
::Super:Refresh( .f. )
endcase
otherwise
return nil
endcase
endif
return 0