La rueda del ratón debe mover todo el reporte arriba y abajo
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
La rueda del ratón debe mover todo el reporte arriba y abajo
Debe proporcionar la misma funcionalidad que al pulsar en la barra de scroll vertical (que parece seguir mal todavía)
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Programa: EREPORT.PRGAntonio Linares wrote:Debe proporcionar la misma funcionalidad que al pulsar en la barra de scroll vertical (que parece seguir mal todavía)
Se soluciona con:
Code: Select all
Function Main( ... )
...
oMainWnd:oMsgBar:KeybOn()
oMainWnd:oWndClient:bMouseWheel= {|nKey, nDelta, nXPos, nYPos| Er_MouseWheel( nKey, nDelta, nXPos, nYPos ) }
BarMenu()
ACTIVATE WINDOW oMainWnd ;
...
Code: Select all
*-- 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.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
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...
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...
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
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
Antes de implementar esta funcion, cuando movias la barra de scroll vertical ya se movia la ventana hacia abajo
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: La rueda del ratón debe mover todo el reporte arriba y 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...
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...
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Por si sirve como pista ... al lanzar un informe , si miramos el "botón" del scroll su tamaño es pequeño , como de medio centímetro . si hago un pequeño scroll con la rueda del raton su tamaño no cambia , pero en el segundo scroll pasa a tener un tamaño mucho mayor ( yo diría que el correcto ) . He puesto una pausa en:
FUNCTION ScrollVertical( lUp, lDown, lPageUp, lPageDown, lPos, nPosZugabe )
LOCAL i, aFirstWndCoors, nAltWert
LOCAL nZugabe := 14
LOCAL nPageZugabe := 392
LOCAL aCliRect := oMainWnd:GetCliRect()
DEFAULT lUp := .F.
DEFAULT lDown := .F.
DEFAULT lPageUp := .F.
DEFAULT lPageDown := .F.
DEFAULT lPos := .F.
pausa(1)
UnSelectAll()
FOR i := 1 TO 100
IF aWnd <> NIL
aFirstWndCoors := GetCoors( aWnd:hWnd )
EXIT
ENDIF
NEXT
....
cuando realizo el primer scroll pasa la pausa sin cambiar nada , pero al realizar el segundo scroll se redimensiona antes de llegar a la pausa ...
FUNCTION ScrollVertical( lUp, lDown, lPageUp, lPageDown, lPos, nPosZugabe )
LOCAL i, aFirstWndCoors, nAltWert
LOCAL nZugabe := 14
LOCAL nPageZugabe := 392
LOCAL aCliRect := oMainWnd:GetCliRect()
DEFAULT lUp := .F.
DEFAULT lDown := .F.
DEFAULT lPageUp := .F.
DEFAULT lPageDown := .F.
DEFAULT lPos := .F.
pausa(1)
UnSelectAll()
FOR i := 1 TO 100
IF aWnd <> NIL
aFirstWndCoors := GetCoors( aWnd:hWnd )
EXIT
ENDIF
NEXT
....
cuando realizo el primer scroll pasa la pausa sin cambiar nada , pero al realizar el segundo scroll se redimensiona antes de llegar a la pausa ...
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Si, lo vi desde que lo implementé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...
Prueba esta solucion
Ha mejorado sustancialmente el desplazamiento con la rueda, pero va muy lento, hay que afinarlo
Tambien hay que comprobar el movimiento con la barra de scroll vertical tanto al pulsar en las flechas como en la propia barra
Code: Select all
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.
Code: Select all
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.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Asi muchisimo mejor el desplazamiento con el raton, pero la barra mal
Code: Select all
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 )
.../...
Code: Select all
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
.../...
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
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...
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...
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
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.
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.
Saludos,
Eduardo
Eduardo
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Si se maneja la rueda del ratón con la versión de hoy funciona OK.
Ahora bien, efectivamente como apunta Eduardo si se maneja la barra de scroll de la ventana del diseñador entonces desaparece todo el diseño y se queda la pantalla en gris:
Ahora bien, efectivamente como apunta Eduardo si se maneja la barra de scroll de la ventana del diseñador entonces desaparece todo el diseño y se queda la pantalla en gris:
Last edited by lucasdebeltran on Sun Aug 31, 2014 6:15 pm, edited 1 time in total.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Hola,
Por favor, no paséis esto.
Gracias.
Por favor, no paséis esto.
Gracias.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Probad la siguiente funcion
El movimiento sobre la barra de scroll mejora significativamente
No lo subo porque estoy probando otras modificaciones,
A ver qué opináis
El movimiento sobre la barra de scroll mejora significativamente
No lo subo porque estoy probando otras modificaciones,
A ver qué opináis
Code: Select all
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.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
No funciona correctamante , llevo 2 dias con ello y no lo he conseguido ... , solo funciona bien y no del todo la parte del scroll del ratón.cnavarro wrote:Probad la siguiente funcion
Creo que nos estamos liando y debemos replantear el funcionamiento desde cero .
Pongamos el analisis en común .Desearia me confirmeis que puntos de los que espongo son correctos y cuales no .
1.- el total del largo a despalzar es ntotalHeight .
2.- si partimos que ntotalHeight es el 100% del desplazamiento podemos partir de un rango de scroll de 0 a 100 oVscroll:setrange( 0,100 )
3.- podemos poner que cada pulsacion goDown()/goup() en un desplazamiento de un 1% y cada gopagup()/gopagedown() es de un 10% por poner unos valores fijos.
4.- el "move" de cada ventana seria en caso de un godown() = ntotalheight /100 y en un gopagedown() = ntotlaHeiht/10
5.- de momento olvidemonos del scroll del raton hasta resolver esto .
Ahora los problemas ....
ovscroll:getpos() ...¿ que devuelve ? en teoria devería devolver la posicion del scroll en la barra ? . A mi no me lo esta haciendo ...
podriamos intentar declarar una variable statica nVpos que nos digera en que posicion se encuentra la barra de scroll y dependiendo de su valor mover las ventanas...
ante un godown() nVpos ++ y nZugabe := ntotalHeight/100 , ante un gopgdown() nVpos:=nvpos+10 y nZugabe := ntotalHeight/10, cuando nvpos llegue a 100 nZugabe := 0 ,etc..
comentarme algo al respecto ...
Saludos a todos.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: La rueda del ratón debe mover todo el reporte arriba y abajo
Manuel,
A mi me parece bien tu planteamiento.
Dices que la barra de scroll no devuelve correctamente la posición, como lo has comprobado ?
A mi me parece bien tu planteamiento.
Dices que la barra de scroll no devuelve correctamente la posición, como lo has comprobado ?