FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index EasyReport, EasyDialog y EasyPreview La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: 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 (fw): Select all Collapse
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.
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: 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 (fw): Select all Collapse
聽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 (fw): Select all Collapse
 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.
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Thu Sep 04, 2014 02: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 .

Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Thu Sep 04, 2014 06:06 PM
Este principio de codigo pare e que funciona mas o menos , falta pulirlo y hacer el desplazamiento arrastrando el scroll ....
Code (fw): Select all Collapse
  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.
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Fri Sep 05, 2014 09:37 AM
Parece que lo he conseguido .... :-) :-) :-) ( 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 (fw): Select all Collapse
#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 (fw): Select all Collapse
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 (fw): Select all Collapse
聽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 (fw): Select all Collapse
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.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: 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
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Fri Sep 05, 2014 04:15 PM

Subido al repositorio.

Posts: 270
Joined: Fri Nov 11, 2005 07:39 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Sat Sep 06, 2014 04: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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Sat Sep 06, 2014 05:50 PM

Es el mismo, no ha cambiado

https://bitbucket.org/fivetech/easyreport

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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Sat Sep 06, 2014 06:02 PM
Creo que es importante modificar en la creacion de las ventanas "hijas" lo siguiente:

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


por

Code (fw): Select all Collapse
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
Posts: 270
Joined: Fri Nov 11, 2005 07:39 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Sat Sep 06, 2014 06: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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Sat Sep 06, 2014 07: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
Posts: 270
Joined: Fri Nov 11, 2005 07:39 PM
Re: La rueda del rat贸n debe mover todo el reporte arriba y abajo
Posted: Sun Sep 07, 2014 04: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

Continue the discussion