Debe proporcionar la misma funcionalidad que al pulsar en la barra de scroll vertical (que parece seguir mal todav铆a)
Debe proporcionar la misma funcionalidad que al pulsar en la barra de scroll vertical (que parece seguir mal todav铆a)
Antonio Linares wrote:Debe proporcionar la misma funcionalidad que al pulsar en la barra de scroll vertical (que parece seguir mal todav铆a)
Function Main( ... )
...
聽 聽oMainWnd:oMsgBar:KeybOn()
聽 聽oMainWnd:oWndClient:bMouseWheel= {|nKey, nDelta, nXPos, nYPos| Er_MouseWheel( nKey, nDelta, nXPos, nYPos ) }
聽 聽BarMenu()
聽 聽ACTIVATE WINDOW oMainWnd ;
...*-- function -----------------------------------------------------------------
* Name........: Er_MouseWheel
* Beschreibung:
* Argumente...:
* R眉ckgabewert: .t.
* Author......:
*-----------------------------------------------------------------------------
#define MK_MBUTTON 聽 聽 聽 聽 聽0x0010
function Er_MouseWheel( nKey, nDelta, nXPos, nYPos )
聽 聽local aPoint := { nYPos, nXPos }
聽 聽
聽 聽ScreenToClient( oMainWnd:oWndClient:hWnd, aPoint )
聽 聽if IsOverWnd( oMainWnd:oWndClient:hWnd, aPoint[ 1 ], aPoint[ 2 ] )
聽 聽 聽 if lAnd( nKey, MK_MBUTTON )
聽 聽 聽 聽 聽if nDelta > 0
聽 聽 聽 聽 聽 聽 ScrollVertical( ,,.T. ) 聽 聽 聽 聽//WheelScroll()
聽 聽 聽 聽 聽else
聽 聽 聽 聽 聽 聽 ScrollVertical( ,,,.T.,, )
聽 聽 聽 聽 聽endif
聽 聽 聽 else
聽 聽 聽 聽 聽if nDelta > 0
聽 聽 聽 聽 聽 聽 ScrollVertical( .T.,,,, .T., -(WheelScroll()) )
聽 聽 聽 聽 聽else
聽 聽 聽 聽 聽 聽 ScrollVertical( ,.T.,,, .T., WheelScroll() )
聽 聽 聽 聽 聽endif
聽 聽 聽 endif
聽 聽 聽 oMainWnd:oWndClient:oVScroll:Refresh()
聽 聽endif
return .t.Cristobal,
Implementado, Muchas gracias! ![]()
He notado que al mover la rueda del rat贸n hacia arriba y hacia abajo, se puede apreciar como las areas por debajo de la primera, se van "metiendo" por debajo. Debe haber un fallo de c谩lculo en las coordenadas, 贸 alguna funci贸n de FWH funciona diferente de como lo hac铆a entonces...
Antonio, yo creo que es un problema de c谩lculo de coordenadas en la funcion ScrollVertical
Antes de implementar esta funcion, cuando movias la barra de scroll vertical ya se movia la ventana hacia abajo
Cristobal,
Si en la l铆nea 655 cambio el valor de nZugabe el comportamiento varia.
No se si es nTotalHeight que est茅 mal. Tampoco he encontrado en donde se inicializa...
Antonio Linares wrote:Cristobal,
Implementado, Muchas gracias!
He notado que al mover la rueda del rat贸n hacia arriba y hacia abajo, se puede apreciar como las areas por debajo de la primera, se van "metiendo" por debajo. Debe haber un fallo de c谩lculo en las coordenadas, 贸 alguna funci贸n de FWH funciona diferente de como lo hac铆a entonces...
function SetScrollBar()
聽 聽local oVScroll
聽 聽local nPageZugabe := 392
聽 聽if !empty( oMainWnd:oWndClient:oVScroll )
聽 聽 聽 //oMainWnd:oWndClient:SetRange( 0, 100 )
聽 聽 聽 oMainWnd:oWndClient:oVScroll:SetRange( 0, nTotalHeight )
聽 聽 聽 oMainWnd:oWndClient:oVScroll:bGoUp 聽 聽 = {|| ScrollVertical( .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oVScroll:bGoDown 聽 = {|| ScrollVertical( , .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oVScroll:bPageUp 聽 = {|| ScrollVertical( ,, .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oVScroll:bPageDown = {|| ScrollVertical( ,,, .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oVScroll:bPos 聽 聽 聽= {| nWert | ScrollVertical( ,,,, .T., nWert ) }
聽 聽 聽 oMainWnd:oWndClient:oVScroll:nPgStep 聽 = nPageZugabe 聽 //392
聽 聽 聽 //oMainWnd:oWndClient:Refresh()
聽 聽 聽 oMainWnd:oWndClient:oVScroll:SetPos(0)
聽 聽endif
聽 聽if ! Empty( oMainWnd:oWndClient:oHScroll )
聽 聽 聽 //oMainWnd:oWndClient:SetRange( 0, 100 )
聽 聽 聽 oMainWnd:oWndClient:oHScroll:SetRange( 0, nTotalWidth )
聽 聽 聽 oMainWnd:oWndClient:oHScroll:bGoUp 聽 聽 = {|| ScrollHorizont( .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oHScroll:bGoDown 聽 = {|| ScrollHorizont( , .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oHScroll:bPageUp 聽 = {|| ScrollHorizont( ,, .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oHScroll:bPageDown = {|| ScrollHorizont( ,,, .T. ) }
聽 聽 聽 oMainWnd:oWndClient:oHScroll:bPos 聽 聽 聽= {| nWert | ScrollHorizont( ,,,, .T., nWert ) }
聽 聽 聽 oMainWnd:oWndClient:oHScroll:nPgStep 聽 = 602
聽 聽 聽 oMainWnd:oWndClient:oHScroll:SetPos(0)
聽 聽endif
return .T.function ScrollVertical( lUp, lDown, lPageUp, lPageDown, lPos, nPosZugabe )
聽 聽local i, aFirstWndCoors, nAltWert
聽 聽local nZugabe 聽 聽 := WheelScroll() * 14 聽 聽 聽// Aumentar
聽 聽local nPageZugabe := 392
聽 聽local aCliRect 聽 聽:= oMainWnd:GetCliRect()
聽 聽DEFAULT lUp 聽 聽 聽 := .F.
聽 聽DEFAULT lDown 聽 聽 := .F.
聽 聽DEFAULT lPageUp 聽 := .F.
聽 聽DEFAULT lPageDown := .F.
聽 聽DEFAULT lPos 聽 聽 聽:= .F.
聽 聽UnSelectAll()
聽 聽FOR i := 1 TO 100
聽 聽 聽 IF aWnd[i] <> nil
聽 聽 聽 聽 聽aFirstWndCoors := GetCoors( aWnd[i]:hWnd )
聽 聽 聽 聽 聽EXIT
聽 聽 聽 ENDIF
聽 聽NEXT
聽 聽
聽 聽IF lUp = .T. .OR. lPageUp = .T.
聽 聽 聽 IF aFirstWndCoors[ 1 ] = 0
聽 聽 聽 聽 聽nZugabe := 0
聽 聽 聽 ELSEIF ( aFirstWndCoors[ 1 ] + IIF( lUp, nZugabe, nPageZugabe ) ) >= 0
聽 聽 聽 聽 聽nZugabe 聽 聽 := -1 * aFirstWndCoors[ 1 ]
聽 聽 聽 聽 聽nPageZugabe := -1 * aFirstWndCoors[ 1 ]
聽 聽 聽 ENDIF
聽 聽ENDIF
聽 聽IF lDown = .T. .OR. lPageDown = .T.
聽 聽 聽 IF ( aFirstWndCoors[ 1 ] + nTotalHeight ) <= aCliRect[3] - 80
聽 聽 聽 聽 聽nZugabe 聽 聽 := 0
聽 聽 聽 聽 聽nPageZugabe := 0
聽 聽 聽 ENDIF
聽 聽ENDIF
聽 聽
聽 聽IF lPos = .T.
聽 聽 聽 nAltWert := oMainWnd:oWndClient:oVScroll:GetPos()
聽 聽 聽 oMainWnd:oWndClient:oVScroll:SetPos( nPosZugabe )
聽 聽 聽 nZugabe := -1 * nTotalHeight * ( oMainWnd:oWndClient:oVScroll:GetPos() - nAltWert ) / nTotalHeight //100
聽 聽ENDIF
聽
聽 聽FOR i := 1 TO 100
聽 聽 聽 IF aWnd[i] <> nil
聽 聽 聽 聽 聽IF lUp = .T. .OR. lPos = .T.
聽 聽 聽 聽 聽 聽 aWnd[i]:Move( aWnd[i]:nTop + nZugabe, aWnd[i]:nLeft, 0, 0, .T. )
聽 聽 聽 聽 聽ELSEIF lDown = .T.
聽 聽 聽 聽 聽 聽 aWnd[i]:Move( aWnd[i]:nTop - nZugabe, aWnd[i]:nLeft, 0, 0, .T. )
聽 聽 聽 聽 聽ELSEIF lPageUp = .T.
聽 聽 聽 聽 聽 聽 aWnd[i]:Move( aWnd[i]:nTop + nPageZugabe, aWnd[i]:nLeft, 0, 0, .T. )
聽 聽 聽 聽 聽ELSEIF lPageDown = .T.
聽 聽 聽 聽 聽 聽 aWnd[i]:Move( aWnd[i]:nTop - nPageZugabe, aWnd[i]:nLeft, 0, 0, .T. )
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 ENDIF
聽 聽NEXT
return .T.function SetScrollBar()
聽 聽local oVScroll
聽 聽local nPageZugabe := 392
聽 聽if !empty( oMainWnd:oWndClient:oVScroll )
聽 聽 聽 //oMainWnd:oWndClient:SetRange( 0, 100 )
聽 聽 聽 oMainWnd:oWndClient:oVScroll:SetRange( 0, nTotalHeight/100 )
.../...function ScrollVertical( lUp, lDown, lPageUp, lPageDown, lPos, nPosZugabe )
.../...
聽 聽IF lPos = .T.
聽 聽 聽 nAltWert := oMainWnd:oWndClient:oVScroll:GetPos()
聽 聽 聽 oMainWnd:oWndClient:oVScroll:SetPos( nPosZugabe )
聽 聽 聽 nZugabe := -1 * nTotalHeight * ( oMainWnd:oWndClient:oVScroll:GetPos() - nAltWert ) / ( nTotalHeight / 100 )
聽 聽ENDIF
.../...Cristobal,
Esta genial! ![]()
Much铆simo mejor y adem谩s se solucion贸 el efecto de que el segundo grupo se iba metiendo debajo del primero! ![]()
Veamos donde se crea la barra de scroll y como se ha definido...
Hola,
Me temo que no funciona, cuando usas el scrollbar de la WndMain se acaba quedando la pantalla en blanco sin las 谩reas.
Pero ya cada vez tiene una pinta impresionante y mucho m谩s r谩pido que el vrd.exe de Tim.

Hola,
Por favor, no pas茅is esto.
Gracias.
function SetScrollBar()
聽 聽//local oVScroll
聽 聽local nPageZugabe := 392/100
聽 聽local oWnd 聽 聽 聽 聽:= oEr:oMainWnd:oWndClient
聽 聽if !Empty( oWnd:oVScroll )
聽 聽 聽 nPageZugabe := 392/100
聽 聽 聽 oWnd:oVScroll:SetRange( 0, nTotalHeight / 100 )
聽 聽 聽
聽 聽 聽 oWnd:oVScroll:bGoUp 聽 聽 = { || ScrollVertical( .T. ) }
聽 聽 聽 oWnd:oVScroll:bGoDown 聽 = { || ScrollVertical( , .T. ) }
聽 聽 聽 oWnd:oVScroll:bPageUp 聽 = { || ScrollVertical( ,, .T. ) }
聽 聽 聽 oWnd:oVScroll:bPageDown = { || ScrollVertical( ,,, .T. ) }
聽 聽 聽 oWnd:oVScroll:bPos 聽 聽 聽= { | nWert | ScrollVertical( ,,,, .T., nWert/100 ) }
聽 聽 聽 oWnd:oVScroll:nPgStep 聽 = nPageZugabe 聽 //392
聽 聽 聽
聽 聽 聽 oWnd:oVScroll:SetPos( 0 )
聽 聽endif
聽 聽if ! Empty( oWnd:oHScroll )
聽 聽 聽 nPageZugabe := 602/100
聽 聽 聽 oWnd:oHScroll:SetRange( 0, nTotalWidth / 100 )
聽 聽 聽 oWnd:oHScroll:bGoUp 聽 聽 = {|| ScrollHorizont( .T. ) }
聽 聽 聽 oWnd:oHScroll:bGoDown 聽 = {|| ScrollHorizont( , .T. ) }
聽 聽 聽 oWnd:oHScroll:bPageUp 聽 = {|| ScrollHorizont( ,, .T. ) }
聽 聽 聽 oWnd:oHScroll:bPageDown = {|| ScrollHorizont( ,,, .T. ) }
聽 聽 聽 oWnd:oHScroll:bPos 聽 聽 聽= {| nWert | ScrollHorizont( ,,,, .T., nWert/100 ) }
聽 聽 聽 oWnd:oHScroll:nPgStep 聽 = nPageZugabe 聽//602
聽 聽 聽 oWnd:oHScroll:SetPos( 0 )
聽 聽endif
return .T.cnavarro wrote:Probad la siguiente funcion
Manuel,
A mi me parece bien tu planteamiento.
Dices que la barra de scroll no devuelve correctamente la posici贸n, como lo has comprobado ?