SCROLL con twbrowse de Hernán

Post Reply
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

SCROLL con twbrowse de Hernán

Post by pymsoft »

Me puse a mirar por que motivo no me funcionan las barras de scroll con el TWBrowse modificado por Hernán (nunca me funcionó con la version a 32 bits)

Me di cuenta que el problema esta acá: (mirando la twbrowse que viene de serie con FWH, en la que si funcionan las barras de scroll)

Code: Select all

METHOD VScroll( nWParam, nLParam ) CLASS TWBrowse

   local nLines := ::nRowCount()
   local nLen

   local nScrollCode := nLoWord( nWParam ) // pgf
   local nPos        := nHiWord( nWParam ) // pgf
   local nScrHandle  := nLParam // pgf

//  WriteInfoTXT( "1) " + ALLTRIM( STR( nWParam ) ) + " nLParam: " + ALLTRIM( STR( nLParam ) ), , "VSCROLL.TXT", .T. )
  nWParam := nScrollCode // pgf
  nLParam := nPos // pgf
//  WriteInfoTXT( "2) " + ALLTRIM( STR( nWParam ) ) + " nLParam: " + ALLTRIM( STR( nLParam ) ), , "VSCROLL.TXT", .T. )


   if GetFocus() != ::hWnd
      SetFocus( ::hWnd )
   endif

  IF nScrHandle == 0

   do case
      case nWParam == SB_LINEUP
           ::GoUp()

      case nWParam == SB_LINEDOWN
           ::GoDown()

      case nWParam == SB_PAGEUP
           ::PageUp()

      case nWParam == SB_PAGEDOWN
           ::PageDown()

      case nWParam == SB_TOP
           ::GoTop()

      case nWParam == SB_BOTTOM
           ::GoBottom()

      case nWParam == SB_THUMBPOSITION

           if ( ::nLen := Eval( ::bLogicLen ) ) < 1
              return 0
           endif

           if nLParam <= 1 // CeSoTech  /// == 0
              ::GoTop()
           elseif nLParam == ::oVScroll:GetRange()[ 2 ]
              ::GoBottom()
           else

              ::lHitTop = .f.
              ::lHitBottom = .f.

              // CeSoTech //

              If ::bGoLogicPos != Nil // Si tiene soporte de ir a un nKeyNo

                 CursorWait()

                 Eval( ::bGoLogicPos, Int( nLParam / 100 * ::nLen ) )

                 ::oVScroll:SetPos( _POSVSCROLL_ )

                 ::Refresh()
                 ::nRowPos:= 1  // Para asegurarnos que vaya donde corresponde

                 CursorArrow()
                 if ::bChange != nil
                    Eval( ::bChange, Self )
                 endif
                 return 0

              Else  // Lo por defecto de FW

                 CursorWait()
                 ::Skip( nLParam - ::oVScroll:GetPos() )
                 CursorArrow()

              EndIf
           endif

           ::oVScroll:SetPos( nLParam )
           
           nLen = Eval( ::bLogicLen )
           if nLParam - ::oVScroll:nMin < nLines
              ::nRowPos = 1
           endif
           if ::oVScroll:nMax - nLParam < Min( nLines, nLen )
              ::nRowPos = Min( nLines, nLen ) - ( ::oVScroll:nMax - nLParam )
           endif
           ::Refresh()
           if ::bChange != nil
              Eval( ::bChange, Self )
           endif

      otherwise
           return nil
   endcase

  ENDIF

return 0

Ahora me da un problema diferente, cuando hago click en la barra y voy al final, no me mueve al final, alguien tiene alguna idea?, solo a mi me pasa?, alguien me puede mandar la ultima version de twbrowse? o al menos el metodo que hace el scroll asi lo comparo con el que estoy modificando yo?

Estoy usando la version 17 de twbrowse, uso FWH 2.7 y xHarbour 0.99.51 y por ahora no puedo actualizar de version, con _ que todo eso implica.


Gracias
Pedro Gonzalez
lorenzo
Posts: 8
Joined: Tue Oct 24, 2006 11:32 am

Post by lorenzo »

Pedro,

a mi me pasa algo parecido. Si compilo con FWH 2.7 los controles de Repag,Avpag,Up,Down en el Browse no se actualizan y los registros se muestran mal.
Sin embargo si compilo con FWH 2.4 va todo perfecto.

No encuentro solución al respecto.
LORENZO.
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

Mas o menos resuelto...

En la clase scrllbar.prg de FW yo tenía activada esta funcion:

Code: Select all

METHOD SetPage( nSize, lReDraw ) CLASS TScrollBar


   local nFlags

   DEFAULT lRedraw := .f.

   if ! Empty( ::hWnd )
      nFlags = SB_CTL
   else
      if ::lVertical
         nFlags = SB_VERT
      else
         nFlags = SB_HORZ
      endif
   endif
   SetScrollInfo( If( ! Empty( ::hWnd ), ::hWnd, ::oWnd:hWnd ),;
                  nFlags, nSize, lReDraw )

return nil

Desactivandola como viene de serie (no me dibuja las barras con dimension variable de acuerdo a la cantidad de registros), y con lo que modifiqué en la clase de twbrowse de Hernán, se resuelve el problema.


_ fueron los siguientes:

Code: Select all

nLParam := nHiWord( nWParam ) // pgf 
nWParam := nLoWord( nWParam ) // pgf

o como lo hice realmente, copiando de la twbrowse original:

Code: Select all

METHOD VScroll( nWParam, nLParam ) CLASS TWBrowse

   local nLines := ::nRowCount()
   local nLen

   local nScrollCode := nLoWord( nWParam ) // pgf
   local nPos        := nHiWord( nWParam ) // pgf
   local nScrHandle  := nLParam // pgf

  nWParam := nScrollCode // pgf
  nLParam := nPos // pgf

   if GetFocus() != ::hWnd
      SetFocus( ::hWnd )
   endif

  IF nScrHandle == 0 // pgf

   do case
      case nWParam == SB_LINEUP 
...
...

Ahora me funciona.

Tu problema no lo he tenido, estas seguro que usas la ultima version de twbrowse? la 17?

Recompilaste toda la clase twbrowse para fwh2.7?

Saludos
Pedro Gonzalez
KRCNET
Posts: 25
Joined: Wed Mar 14, 2007 1:58 pm
Location: Belo Horizonte/MG/Brasil

Post by KRCNET »

Senhores,


Vc tem que colocar a Twbrowse , antes da FIVEHx.LIB e FiveHC.LIB, como abaixo:

C_LIB_INSTALL%\c0w32.obj=1
C:\LIBTER\LIB97\TWBRW97.LIB=2
C:\FWH\LIB\Fivehx.lib=3
C:\fwh\LIB\Fivehc.lib=4
%HB_LIB_INSTALL%\rtl.lib=5
%HB_LIB_INSTALL%\vm.lib=6
%HB_LIB_INSTALL%\gtgui.lib=7
%HB_LIB_INSTALL%\lang.lib=8

Ate mais
Cleber Ribeiro Conde
Krc Sistemas
FWH 7.1 / xHarbour 0.99.71 / xMate/ SqlLib
User avatar
Hernan Diego Ceccarelli
Posts: 84
Joined: Fri Oct 07, 2005 4:51 pm
Location: Rosario - Santa Fe - Argentina
Contact:

Post by Hernan Diego Ceccarelli »

Voy a chequear la existencia del problema. :o

Salu2 :D
Post Reply