Page 1 of 1

SCROLL con twbrowse de Hernán

PostPosted: Tue Apr 03, 2007 4:30 pm
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  Expand view
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 los cambios que todo eso implica.


Gracias

PostPosted: Wed Apr 04, 2007 11:56 am
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.

PostPosted: Wed Apr 04, 2007 2:05 pm
by pymsoft
Mas o menos resuelto...

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


Code: Select all  Expand view
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.


Los cambios fueron los siguientes:

Code: Select all  Expand view
nLParam := nHiWord( nWParam ) // pgf
nWParam := nLoWord( nWParam ) // pgf



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

Code: Select all  Expand view
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

PostPosted: Thu Apr 05, 2007 11:44 am
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

PostPosted: Thu Apr 05, 2007 1:30 pm
by Hernan Diego Ceccarelli
Voy a chequear la existencia del problema. :o

Salu2 :D