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

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

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

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

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

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


La idea de codigo era la siguiente :

Code: Select all | Expand

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

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

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

  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

Post by mastintin »

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

#define SB_HORZ         0#define SB_VERT         1#define SB_CTL          2CLASS 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

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


3.- cambio en SetScrollBar()

Code: Select all | Expand

 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 )   endifreturn .T. 


4.- añadida funcion ScrollV() que sustituye a scrollVertical() ( de momento comentada )

Code: Select all | Expand

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 = lReticulereturn .T. 
User avatar
Antonio Linares
Site Admin
Posts: 42730
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 95 times
Been thanked: 108 times
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: 1516
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 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
User avatar
cnavarro
Posts: 6608
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

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

Post by cnavarro »

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: 6608
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

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

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

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
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 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
User avatar
cnavarro
Posts: 6608
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

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