Posible bug en TXBrowse:PageUp()

Posible bug en TXBrowse:PageUp()

Postby Carlos Mora » Mon Sep 24, 2007 11:29 am

Antonio,

Usando TestxBrw del directorio samples, haz estas dos modificaciones:
1) Deja solo 30 registros en customer.dbf
2) Modifica HorzRow() como lo que sigue:
Code: Select all  Expand view  RUN
STATIC FUNCTION HorzRow( oWnd )

   local oChild, oBrw, oFont

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, -12

   DEFINE WINDOW oChild TITLE "Horizontal lines & Row selector browse" MDICHILD OF oWnd

   oBrw := TXBrowse():New( oWnd )
   oBrw:SetFont( oFont )

   oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW
   oBrW:nColDividerStyle    := LINESTYLE_BLACK
   oBrw:nRowDividerStyle    := LINESTYLE_BLACK

   oBrw:SetRDD()
   oBrw:CreateFromCode()
   oChild:oClient := oBrw

   ACTIVATE WINDOW oChild ON INIT oBrw:SetFocus()

RETURN NIL



Es decir agregarle el FONT y cambiamos los separadores de filas y columnas.

Luego lo ejecutas y entras en esa opción. Bajas hasta llegar al último registro usando la tecla hacia abajo. Cuando llegue al último registro, le dás a RePag, es decir que haga un pageUp, con lo que me deja el browse "descolocado", desincronizado con la información de la DBF.
Image
El error es reproducible. Aparentemente el ajuste no es correcto cuando al pintar hay que ajustar el valor de nRowSel

Un saludo,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Carlos Mora » Tue Sep 25, 2007 1:15 pm

Antonio,
has podido verificar el error?

Carlos
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Carlos Mora » Thu Sep 27, 2007 8:20 am

Buenos días Antonio,

ya parezco el "malo de la peli" con el tema TXBrowse

Modifiqué el testxbrw.prg del directorio samples, la función multiline de la siguiente forma:


Code: Select all  Expand view  RUN
STATIC FUNCTION MultiLine( oWnd )

   local oChild, oBrw
   local nFor, oFont

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, -12

   DEFINE WINDOW oChild TITLE "Horizontal and vertical lines and dotted Cell selector browse" MDICHILD OF oWnd

   oBrw := TXBrowse():New( oWnd )
   oBrw:SetFont( oFont )

   oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLCELL
   oBrw:nColDividerStyle    := LINESTYLE_BLACK
   oBrw:nRowDividerStyle    := LINESTYLE_BLACK
   oBrw:lColDividerComplete := .t.
   oBrw:nHeaderLines        := 2
   oBrw:nDataLines          := 2
   oBrw:SetRDD()

   for nFor := 1 to Fcount()
      oBrw:aCols[ nFor ]:cHeader := "Field: " + ltrim( str( nFor ) ) + CRLF + FieldName( nFor )
      oBrw:aCols[ nFor ]:nDataStrAlign := AL_RIGHT
      oBrw:aCols[ nFor ]:nHeadStrAlign := AL_RIGHT
   next

   oBrw:CreateFromCode()

   oChild:oClient := oBrw

   ACTIVATE WINDOW oChild ON INIT oBrw:SetFocus()

RETURN NIL




Pero no me justifica a la derecha los datos. Los headers los hace bien.
Image
Pudiste ver algo del ejemplo que te puse del otro tema?


Un saludo,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Carlos Mora » Mon Oct 15, 2007 8:28 am

Otro tema para resolver, y para este no tengo el codigo fuente.

Modifica en testxbrw el código del ejemplo de uso de xBrowse en diálogo
Code: Select all  Expand view  RUN

STATIC FUNCTION NewDialog( oWnd )

   local oDlg, oBrw

   DEFINE DIALOG oDlg RESOURCE "TEST" OF oWnd

   oBrw := TXBrowse():New( oWnd )

   //-----------8<----------- Añadido desde acá
   oBrw:lRecordSelector    := .F.
   oBrw:nHeaderLines       := 2

   oBrw:nMarqueeStyle      := MARQSTYLE_HIGHLROW
   oBrw:nColDividerStyle   := ;
   oBrw:nRowDividerStyle   := LINESTYLE_BLACK
   //-----------8<----------- Añadido hasta acá

   oBrw:CreateFromResource( 101 )

   ACTIVATE DIALOG oDlg

RETURN NIL


cuando hagas el scroll vertical con la rueda del raton o bien con las teclas arriba y abajo, verás que se pintan mal las últimas líneas.

Es un problema que están en el XBrwScroll() , que estan en C y que no está el código fuente, por lo que no puedo buscarle una solución.

En general el fallo me aparece cuando tengo headers de más de 1 línea de alto.

Un saludo,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Antonio Linares » Mon Oct 15, 2007 8:41 am

Carlos,

Aqui tienes el código:
Code: Select all  Expand view  RUN
#ifdef __HARBOUR__
HB_FUNC( XBRWSCROLL ) // ( hWnd, nRows, nRowHeight, nHeaderHeight, nFooterHeight ) --> nil
#else
CLIPPER XBRWSCROLL( PARAMS ) // ( hWnd, nRows, nRowHeight, nHeaderHeight, nFooterHeight ) --> nil
#endif
{
   HWND hWnd   = ( HWND ) _parnl( 1 );
   int wRows   = _parni( 2 );
   int wHeight = _parnl( 3 );
   RECT rct;

   GetClientRect( hWnd, &rct );

   rct.top += ( _parnl( 4 ) );
   rct.bottom -= ( _parnl( 5 ) );
   rct.bottom -= ( ( rct.bottom - rct.top ) % _parnl( 3 ) ) + 1;

   ScrollWindowEx( hWnd, 0, -( wHeight * wRows ), 0, &rct, 0, 0, 0 );
}

Como ves, el XBrowse fué un regalito que nos dejaron con bastantes "bichitos" dentro :-)

Se me habían pasado estos mensajes tuyos, discúlpame, voy a echarles un vistazo cuanto antes
Last edited by Antonio Linares on Mon Oct 15, 2007 9:57 am, edited 1 time in total.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42157
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Carlos Mora » Mon Oct 15, 2007 9:33 am

Antonio,

gracias por el código. Para más detalle respecto del problema del scroll, se pinta mal cuando hacemos el scroll hacia arriba, y luego ese pintado mal hecho afecta al scroll hacia arriba.

Ya te cuento si le doy en el fallo.

Carlos
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Carlos Mora » Mon Oct 15, 2007 10:37 am

Antonio,

para que no digan que solo doy problemas :D

en el método goup()
debe cambiarse la llamada a EraseData
Code: Select all  Expand view  RUN
            // ::EraseData( ( ( Int(nHeight/::nRowHeight) + 1 ) * ::nRowHeight ) + 10 ) lo quité por los problemas de pintado, con esto lo resuelve.
            ::EraseData( ::HeaderHeight() + ::nRowHeight * ::RowCount() )



Lo que se calculaba mal era la posición desde donde hay que borrar. Al menos en mis pruebas funciona correctamente, si alguien más me lo confirma...

Es cierto que el Xbrowse adolece de muchos bugs, pero de los que he probado es el mejor estructurado, y aunque eventualmente falla es el más sencillo de extender. Tal vez hay algunos detalles mejorables pero en lo personal es el que más me gusta. Añadirle prestaciones no es muy complicado, según sé hay algunos compañeros que le han añadido Headers con temas de Windows usando los THeaders de Windows y algunas otras extensiones.

Sigo en el tema XBrowse como habras notado, creo que al final lo vamos a dejar bien.

Un saludo,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Antonio Linares » Mon Oct 15, 2007 12:28 pm

Carlos,

> ::EraseData( ::HeaderHeight() + ::nRowHeight * ::RowCount() )

Modificado. Gracias! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42157
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Antonio Linares, Google [Bot] and 38 guests

cron