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

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 »

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

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

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



 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


 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: 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 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 _ no funcionen como esperabamos .
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 »

Este principio de codigo pare e que funciona mas o menos , falta pulirlo y hacer el desplazamiento arrastrando el scroll ....

Code: Select all


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

Parece que lo he conseguido .... :D :roll: :mrgreen: ( afalta de afinar un poco mas )
No subo _ 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


#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


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

 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


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

Por favor súbelo directamente al repositorio y lo probamos facilmente :-)
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 »

Subido al repositorio.
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

Post by jcaro »

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 _, 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
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 »

Es el mismo, no ha cambiado

https://bitbucket.org/fivetech/easyreport
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 »

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

Code: Select all

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

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

Post by jcaro »

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 _ quedan grabados en el ( Download repository ) y no se ven externamente las fechas de los _ ?

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

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

Post by jcaro »

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