La rueda del ratón debe mover todo el reporte arriba y abajo

La rueda del ratón debe mover todo el reporte arriba y abajo

Postby Antonio Linares » Sat Aug 16, 2014 10:48 am

Debe proporcionar la misma funcionalidad que al pulsar en la barra de scroll vertical (que parece seguir mal todavía)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42048
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby cnavarro » Sat Aug 16, 2014 11:26 pm

Antonio Linares wrote:Debe proporcionar la misma funcionalidad que al pulsar en la barra de scroll vertical (que parece seguir mal todavía)


Programa: EREPORT.PRG
Se soluciona con:
Code: Select all  Expand view

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  Expand view

*-- 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.
 


Pero, tal y como indicas, el cálculo del desplazamiento de las ventanas sigue mal
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby Antonio Linares » Sun Aug 17, 2014 10:04 am

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...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42048
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby cnavarro » Sun Aug 17, 2014 10:14 am

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 Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby Antonio Linares » Sun Aug 17, 2014 11:03 am

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...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42048
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby mastintin » Sun Aug 17, 2014 11:17 am

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[i] <> NIL
aFirstWndCoors := GetCoors( aWnd[i]: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 ...
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby cnavarro » Sun Aug 17, 2014 7:36 pm

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...


Si, lo vi desde que lo implementé
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  Expand view

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.
 


y tambien

Code: Select all  Expand view

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.
 


https://navarro_cristobal@bitbucket.org ... ort_n1.git
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby cnavarro » Sun Aug 17, 2014 8:07 pm

Asi muchisimo mejor el desplazamiento con el raton, pero la barra mal

Code: Select all  Expand view

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  Expand view

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 Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby Antonio Linares » Mon Aug 18, 2014 5:30 am

Cristobal,

Esta genial! :-)

Muchísimo mejor y además se solucionó el efecto de que el segundo grupo se iba metiendo debajo del primero! :-D

Veamos donde se crea la barra de scroll y como se ha definido...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42048
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby mgsoft » Thu Aug 21, 2014 6:49 pm

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.
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby lucasdebeltran » Sun Aug 24, 2014 7:04 pm

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:

Image
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.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby lucasdebeltran » Sun Aug 31, 2014 6:15 pm

Hola,

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.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby cnavarro » Tue Sep 02, 2014 9:18 pm

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

Code: Select all  Expand view

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.

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby mastintin » Wed Sep 03, 2014 8:20 am

cnavarro wrote:Probad la siguiente funcion

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.
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.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: La rueda del ratón debe mover todo el reporte arriba y abajo

Postby Antonio Linares » Wed Sep 03, 2014 10:18 am

Manuel,

A mi me parece bien tu planteamiento.

Dices que la barra de scroll no devuelve correctamente la posición, como lo has comprobado ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42048
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to EasyReport, EasyDialog y EasyPreview

Who is online

Users browsing this forum: No registered users and 6 guests