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.
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:oVScroll: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:oVScroll:Refresh()
oMainWnd:oWndClient:oVScroll:SetPos(0)
endif
if ! Empty( oMainWnd:oWndClient:oHScroll )
//oMainWnd:oWndClient:oHScroll: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:oVScroll: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
.../...
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
Return to EasyReport, EasyDialog y EasyPreview
Users browsing this forum: No registered users and 6 guests