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

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

Postby mastintin » Wed Sep 03, 2014 11:58 am

Antonio Linares wrote:Manuel,
Dices que la barra de scroll no devuelve correctamente la posición, como lo has comprobado ?

Algo raro tenia en el codigo, ahora parece que lo devuelve bien
----------- editado -------------
en un posterior post indico cuando lo devuelve mal ....( al cambiar el tamaño del boton de scroll )
Code: Select all  Expand view  RUN

function SetScrollBar()

   local oVScroll
   local nPageZugabe :=0
   if ! Empty( oEr:oMainWnd:oWndClient:oVScroll )
      oEr:oMainWnd:oWndClient:oVScroll:SetRange( 0,100  )
      oEr:oMainWnd:oWndClient:oVScroll:bGoUp     =  {|| ScrollV( )   }
      oEr:oMainWnd:oWndClient:oVScroll:bPageUp   = {|| ScrollV()   }
      oEr:oMainWnd:oWndClient:oVScroll:bGoDown   = {||  ScrollV( )  }
      oEr:oMainWnd:oWndClient:oVScroll:bPageDown = {|| ScrollV( ) }
      oEr:oMainWnd:oWndClient:oVScroll:nPgStep   =  10

      oEr:oMainWnd:oWndClient:oVScroll:bPos      = {| nWert | .t.  }

      oEr:oMainWnd:oWndClient:oVScroll:SetPos( 0 )

    endif
    ........

   
 function ScrollV( lUp, lDown, lPageUp, lPageDown, lPos, nPosZugabe )
    LOCAL nDifPos

    msginfo(oEr:oMainWnd:oWndClient:oVScroll:GetPos() )

return .T.

 
Last edited by mastintin on Wed Sep 03, 2014 2:04 pm, edited 1 time in total.
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 mastintin » Wed Sep 03, 2014 12:37 pm

Mas sobre el asunto ....
Aqui aparece el problema ...
Si lanzamos esto , inicialmente el botón del scroll aparece pequeño y devuelve bien en que posición se encuentra el scroll si hago que nPixScroll := 0 ( no se mueven las ventanas ) el comportamiento del scroll es normal , si coloco nPixScroll := 1 ( movería las ventanas un pixel ) entonces el botón se vuelve grande y a partir de ese momento nPos siempre tiene valor 1 ( como si no avanzara )
Code: Select all  Expand view  RUN



 function ScrollV(  )
    LOCAL nDifPos := 0
    LOCAL nPos:= 0
    LOCAL nPixScroll

    nPos := oEr:oMainWnd:oWndClient:oVScroll:GetPos()
    msginfo(nPos)

    nPixScroll := 1

     for i := 1 to 100
      if aWnd[ i ] <> nil
         aWnd[ i ]:Move( aWnd[ i ]:nTop + nPixScroll, aWnd[ i ]:nLeft, 0, 0, .T. )
      endif
   next



return .T.
 


La idea de codigo era la siguiente :
Code: Select all  Expand view  RUN


 function ScrollV(  )
    LOCAL nDifPos := 0
    LOCAL nPos:= 0
    LOCAL nPixScroll


    nPos := oEr:oMainWnd:oWndClient:oVScroll:GetPos()
    nDifPos := nPosV - nPos
    nPosV:= nPos

    nPixScroll := nDifPos * (   nTotalHeight ) /100  // ojo con los decimales que hace que se solapen ventanas ....

     for i := 1 to 100
      if aWnd[ i ] <> nil

         aWnd[ i ]:Move( aWnd[ i ]:nTop + nPixScroll, aWnd[ i ]:nLeft, 0, 0, .T. )

      endif
   next



return .T.


 
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 mastintin » Thu Sep 04, 2014 2:30 pm

Por si a alguien le vale ... ntotalHeight no es un valor en pixeles tal cual pues su valor se multiplica segun el tipo de medida que usamos mm-> *3 ..
Esto `puede hacer que algunos de los calculos no funcionen como esperabamos .
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 mastintin » Thu Sep 04, 2014 6:06 pm

Este principio de codigo pare e que funciona mas o menos , falta pulirlo y hacer el desplazamiento arrastrando el scroll ....
Code: Select all  Expand view  RUN


  function ScrollV( lUp,lDown, lpageUP,lpageDown , lpos,nPos )
    local i, aFirstWndCoors, nAltWert
    LOCAL nPixScroll
    local aCliRect    := oEr:oMainWnd:GetCliRect()

  DEFAULT lDown     := .F.
  DEFAULT lUp       := .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
        nPixScroll := 20
     ENDIF
     IF lPageUp
        nPixScroll := 200
     endif
     IF lup .OR. lPageup
         if aFirstWndCoors[ 1 ] = 0
           nPixScroll := 0
        elseif aFirstWndCoors[ 1 ] + nPixScroll >= 0
           nPixScroll     := -1 * aFirstWndCoors[ 1 ]
        endif

    ENDIF

    IF lDown
        nPixScroll := -20
    ENDIF
     IF lPageDown
        nPixScroll := -200
     endif

     if lDown = .T. .OR. lPageDown = .T.
          if  (-1*aFirstWndCoors[ 1 ] ) >=  ( nTotalHeight  )
              nPixScroll     := 0
          endif
   endif

   if lPos = .T.
      /*
      msginfo(  aFirstWndCoors[ 1 ] )
      nPixScroll := nPos * 10
        msginfo(Str(npixScroll)+"pix")
         IF nPixScroll > aFirstWndCoors[ 1 ]
               nPixScroll := 0
         ELSE
            IF nPixScroll < nTotalHeight - (-1*aFirstWndCoors[ 1 ] )
                nPixScroll := 0
             endif

          endif
      */

   endif


    ScrollWindow( oEr:oMainWnd:oWndClient:hWnd, 0, nPixScroll, 0, GetClientRect( oEr:oMainWnd:oWndClient:hWnd ) )
    oEr:oMainWnd:oWndClient:refresh()


return .T.
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 mastintin » Fri Sep 05, 2014 9:37 am

Parece que lo he conseguido .... :D :roll: :mrgreen: ( afalta de afinar un poco mas )
No subo los cambios al repositorio para probarlo bien antes, pero dejo aqui todo el código y espero vuestro feedback ...
1.- he creado una clase derivada de scrollbar ( colocada al final del archivo ereport.prg ) ....
Code: Select all  Expand view  RUN


#define SB_HORZ         0
#define SB_VERT         1
#define SB_CTL          2


CLASS ER_ScrollBar FROM  TScrollBar

   DATA   nPrevPos

   METHOD SetPos( nPos ) INLINE ;
                 ::nPrevPos:= ::GetPos() ,;
                 SetScrollPos( if( ::lIsChild, ::oWnd:hWnd, ::hWnd ),;
                 If( ::lIsChild, If( ::lVertical, SB_VERT, SB_HORZ ), SB_CTL ),;
                 nPos, ::lReDraw )

ENDCLASS

 


2.- cambio en ER_MouseWheel ..
Code: Select all  Expand view  RUN


function ER_MouseWheel( nKey, nDelta, nXPos, nYPos )

   local aPoint := { nYPos, nXPos }

   ScreenToClient( oEr:oMainWnd:oWndClient:hWnd, aPoint )
   lScrollVert  := .T.
   if IsOverWnd( oEr:oMainWnd:oWndClient:hWnd, aPoint[ 1 ], aPoint[ 2 ] )
 
      if lAnd( nKey, MK_MBUTTON )
         if nDelta > 0
            ScrollV(-4, .t.)
         else
            ScrollV(4,,.t.)
         endif
      else
         if nDelta > 0
            ScrollV( - WheelScroll() , .T.,, .T. )
         else
            ScrollV( WheelScroll() ,,.T.,.T. )
         endif
      endif

   endif

return .T.

 


3.- cambio en SetScrollBar()
Code: Select all  Expand view  RUN

 function SetScrollBar()

   //local oVScroll
   local nPageZugabe //:= 392/100
   local oWnd        := oEr:oMainWnd:oWndClient

   if !Empty( oWnd:oVScroll )
 
      oWnd:oVScroll := ER_ScrollBar():WinNew(0,100,10,.T., oWnd )

      oWnd:oVScroll:bGoUp     = { ||  ScrollV(-1 )  }
      oWnd:oVScroll:bGoDown   = { || ScrollV(1) }
      oWnd:oVScroll:bPageUp   = { ||  ScrollV(-4)  }
      oWnd:oVScroll:bPageDown = { || ScrollV(4 ) }
      oWnd:oVScroll:bPos      = { | nWert | ScrollV(nWert )  }
      oWnd:oVScroll:nPgStep   = 10

      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.
 


4.- añadida funcion ScrollV() que sustituye a scrollVertical() ( de momento comentada )
Code: Select all  Expand view  RUN


function ScrollV( nPosZugabe, lUp, lDown, lPos )
   local i, aFirstWndCoors, nAltWert
    local nZugabe     := 14
   local nPageZugabe := 392
   local aCliRect    := oEr:oMainWnd:GetCliRect()
   local lReticule
   LOCAL oVScroll := oEr:oMainWnd:oWndClient:oVScroll

   DEFAULT lUp       := .F.
   DEFAULT lDown     := .F.
   DEFAULT lPos      := .F.

   UnSelectAll()

    for i := 1 to 100
      if aWnd[ i ] <> nil
         aFirstWndCoors := GetCoors( aWnd[ i ]:hWnd )
         EXIT
      endif
   next

   if lUp
      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
      if aFirstWndCoors[ 1 ] + (nTotalHeight) <= aCliRect[3] - 80
         nZugabe     := 0
         nPageZugabe := 0
      endif
   endif


   lReticule = oGenVar:lShowReticule
   oGenVar:lShowReticule = .F.
   SetReticule( 0, 0 ) // turn off the rulers lines


   nAltWert := IF ( lPos, oVScroll:GetPos(), oVScroll:nPrevPos )

   oVScroll:SetPos( nPosZugabe )
   nZugabe := nTotalHeight * ( oVScroll:GetPos() - nAltWert ) / ( (nTotalHeight) / 100 )

   for i := 1 to 100
      if aWnd[ i ] <> nil
         aWnd[ i ]:Move( aWnd[ i ]:nTop - Int(nZugabe/10), aWnd[ i ]:nLeft, 0, 0, .T. )
      endif
   next

   oGenVar:lShowReticule = lReticule

return .T.
 
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 » Fri Sep 05, 2014 12:14 pm

Manuel,

Por favor súbelo directamente al repositorio y lo probamos facilmente :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
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 » Fri Sep 05, 2014 4:15 pm

Subido al repositorio.
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 jcaro » Sat Sep 06, 2014 4:46 pm

Hola Manuel:

Primero gracias a ti y los demas colegas del foro, por el trabajo que estan haciendo, se ve excelente.

Me gustaria probarlo, donde bajo tu repositorio, me puedes poner aqui el ultimo link , con estos cambios, pues con el
monton de cambios que estan haciendo, es re-facil perderse :oops: .

Saludos,

Juan
Juan
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
jcaro
 
Posts: 270
Joined: Fri Nov 11, 2005 7:39 pm

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

Postby cnavarro » Sat Sep 06, 2014 5:50 pm

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: 6549
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 » Sat Sep 06, 2014 6:02 pm

Creo que es importante modificar en la creacion de las ventanas "hijas" lo siguiente:

Code: Select all  Expand view  RUN

aWnd[ nWnd ] = ER_MdiChild():New( nTop, 0, nTop + nHeight + nAreaZugabe,;
                            nWidth, cTitle, nOr( WS_BORDER ),, oEr:oMainWnd,, .T.,,,,;
                            oGenVar:oAreaBrush, .T. )
 


por

Code: Select all  Expand view  RUN

aWnd[ nWnd ] = ER_MdiChild():New( nTop, 0, nHeight + nAreaZugabe,;
                            nWidth, cTitle, nOr( WS_BORDER ),, oEr:oMainWnd,, .T.,,,,;
                            oGenVar:oAreaBrush, .T. )
 


Eso permite ajustar mejor la longitud total de las ventanas hijas
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: 6549
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 jcaro » Sat Sep 06, 2014 6:17 pm

Hola Cristobal , gracias por responder:

Lo que pasa es que al ver el repositorio, sale con una fecha del 2014-08-06 ( easyreport.zip )

Esto me confunde, pues no se supone que si actualizan algun prg, tambien deberia modificarse la fecha del archivo exterior ?

O los cambios quedan grabados en el ( Download repository ) y no se ven externamente las fechas de los ultimos cambios ?

Como puedo estar seguro que estoy usando la ultima actualizacion de los programas.

Por eso mi consulta y duda de cual archivo bajar.


Saludos,
Juan

PD: envie la misma respuesta, pero no se donde se fue, si aparece 2 veces, borren una porfis.
Juan
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
jcaro
 
Posts: 270
Joined: Fri Nov 11, 2005 7:39 pm

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

Postby cnavarro » Sat Sep 06, 2014 7:36 pm

Juan, en Descargas, selecciona "Download repository"
Obtendrás en zip, los ficheros del repositorio
Aunque te aconsejo que instales Git para realizar actualizaciones de una forma sencilla
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: 6549
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 jcaro » Sun Sep 07, 2014 4:30 pm

Gracias Cristobal, lo voy a realizar de esa manera.

Saludos,
Juan
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
jcaro
 
Posts: 270
Joined: Fri Nov 11, 2005 7:39 pm

Previous

Return to EasyReport, EasyDialog y EasyPreview

Who is online

Users browsing this forum: No registered users and 3 guests