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

User avatar
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

Post by Antonio Linares »

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
cnavarro
Posts: 5792
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

Post by cnavarro »

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

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.
 
Pero, tal y como indicas, el cálculo del desplazamiento de las ventanas sigue mal
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.
User avatar
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

Post by Antonio Linares »

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
cnavarro
Posts: 5792
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

Post by cnavarro »

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

Post by Antonio Linares »

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

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

Post by mastintin »

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 ...
User avatar
cnavarro
Posts: 5792
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

Post by cnavarro »

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

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

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
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.
User avatar
cnavarro
Posts: 5792
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

Post by cnavarro »

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

Post by Antonio Linares »

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
mgsoft
Posts: 398
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

Post by mgsoft »

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

Post by lucasdebeltran »

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
Contact:

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

Post by lucasdebeltran »

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
cnavarro
Posts: 5792
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

Post by cnavarro »

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

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

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

Post by mastintin »

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

Post by Antonio Linares »

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
Post Reply