Vista la necesidad de un colega, expuesta aquí en el foro, y, por supuesto, la mía propia, viewtopic.php?f=6&t=26312#p144716 , me he puesto a trabajar en una solución, la cual creo que he encontrado.
La he probado bastante y no me ha dado ninguna falla.
Ahora el Method GoLeft() Class TXBrowse, detecta si se está utilizando columnas congeladas, y se comporta como lo necesitamos. Si al avanzar hacia la derecha, se ocultan columnas por las congeladas, al regresar hacia la izquierda y llegar a la primer columna despues de la nFreezed y se continua avanzando hacia la izquierda, van apareciendo las ocultas, mientras el cursor se mantiene en la misma columna, hasta que aparece la No. 1 despues de las congeladas, y hasta entonces continua avanzando sobre las congeladas. Aqui el codigo original, y el modificado por tu servidor.
//----------------------------------------------------------------------------//
/*
METHOD GoLeft( lOffset, lRefresh ) CLASS TXBrowse
::CancelEdit()
if ::nMarqueeStyle == MARQSTYLE_NOMARQUEE .or. ( ::nMarqueeStyle >= MARQSTYLE_HIGHLROW .and. ::bClrRowFocus == nil )
lOffset := .t.
endif
DEFAULT lOffset := .f.,;
lRefresh := .t.
if ( !lOffset .and. ::IsDisplayPosVisible( ::nColSel - 1 ) ) .or. ;
( ::nColOffset == 1 .and. ::nColSel > 1 )
::nColSel--
if lRefresh
if ::FullPaint()
::Super:Refresh( .t. )
else
::DrawLine( .t. )
endif
endif
elseif ::nColOffset > 1
::nColOffset--
::GetDisplayCols()
if lRefresh
::Super:Refresh( ::FullPaint() )
endif
endif
if ::oHScroll != nil
::oHScroll:GoUp()
endif
::Change( .f. )
return nil
*/
- Code: Select all Expand view
- //-----------------------------------------------------
//Method GoLeft() modified by Francisco J. Alegría P. - May 18, 2013
//------------------------------------------------------
METHOD GoLeft( lOffset, lRefresh ) CLASS TXBrowse
local oFirstCol
::CancelEdit()
if ::nMarqueeStyle == MARQSTYLE_NOMARQUEE .or. ( ::nMarqueeStyle >= MARQSTYLE_HIGHLROW .and. ::bClrRowFocus == nil ) ;
.or. ::nFreeze > 0
lOffset := .t.
endif
DEFAULT lOffset := .f.,;
lRefresh := .t.
IF !lOffset
if ( ::IsDisplayPosVisible( ::nColSel - 1 ) ) .or. ;
( ::nColOffset == 1 .and. ::nColSel > 1 )
::nColSel--
if lRefresh
if ::FullPaint()
::Super:Refresh( .t. )
else
::DrawLine( .t. )
endif
endif
elseif ::nColOffset > 1
::nColOffset--
::GetDisplayCols()
if lRefresh
::Super:Refresh( ::FullPaint() )
endif
endif
ELSE
if ::SelectedCol():nCreationOrder == 1
return nil
endif
oFirstCol := if ( ::nFreeze > 0, ::aCols[::nFreeze+1], ::aCols[1] )
if ::IsDisplayPosVisible( oFirstCol:nPos, .t. )
::nColSel--
if lRefresh
::Super:Refresh( .t. )
endif
else
::nColSel--
if lRefresh
::Super:Refresh( .t. )
endif
if ::nColSel == ::nFreeze
::GoRight()
::nColOffSet--
::GetDisplayCols()
if lRefresh
::Super:Refresh( ::FullPaint() )
endif
if ::oHScroll != nil
::oHScroll:GoUp()
endif
endif
endif
ENDIF
if ::oHScroll != nil
::oHScroll:GoUp()
endif
::Change( .f. )
return nil
Espero que sea de utilidad.
Saludos.