Page 1 of 1
Última linea al final del browse (SOLUCIONADO)
Posted: Fri Dec 20, 2013 9:45 am
by Andrés González
Tanto en TCBRWOSE como en XBROWSE le digo que valla o al principio goto(1) o al final con goto( lastrec()) según me interese dependiendo de la base de datos. Si le digo que vaya al principio no hay problema ya que me muestra todas las demás lineas a continuación de la primera, pero si le digo que me vaya a la última me la coloca en la primera linea del browse y las anteriores ocultas y el resto del browse en blanco. Las puedo ver moviendo las lineas sin problemas, lo cual es un incordio para el usuario, pero como puedo hacer para que el último registro se me muestre al final del browse, o sea, como puedo hacer para que el registro seleccionado sea el último del browse que se muestra y se vean los anteriores hasta la linea primera del browse. Claro está que cuando se trate del primer registro debe estar en la primera linea.
Re: Última linea al final del browse
Posted: Fri Dec 20, 2013 12:56 pm
by Marcelo Via Giglio
Hola,
intenta con oBrw:gotop() seguido de oBrow:goBottom()
nos comentas si funciona
saludos
Re: Última linea al final del browse
Posted: Fri Dec 20, 2013 8:32 pm
by Andrés González
Ya lo había intentado y no me funciona....
Code: Select all
@ -1, 16 COLUMN BROWSE oBrw OF oWndEdit ;
FONT oFont ;
SIZE oWnd:nWidth(),oWnd:nHeight(); //Ancho y lago posilbe COLOR CLR_BLACK, 14481663;
ON CHANGE ( aMantStack[nLen, 4] := str(recno()), oMsgRecNo:SetText("Registro: "+ alltrim( str(recno())) + "/" + alltrim(str(lastrec())) ), oWndEdit:Update() )
//Añado columna si esta borrado el registro para eliminacion
ADD COLUMN TO BROWSE oBrw ;
HEADER "D." OEM ;
DATA iif(deleted(),'>>','');
NOBAR CENTER ;
COLORS CLR_WHITE , 9129488 ; //nRGB( 190, 215, 190 )
SIZE 15
//Añado una columna por cada campo de la base de datos
for nPos := 1 to Len(f_expd) // Array con NOMBRE DE CAMPOS
ADD COLUMN TO BROWSE oBrw; //
HEADER f_nomd[nPos] OEM ; // Array con TITULOS DE LAS COLUMNAS
DATA FieldWBlock( f_expd[nPos] , Select()) // Aca se genera el CodeBlock para el CAMPO
next
//Las dos lineas siguientes pone el color en las cabeceras de columnas
oBrw:nClrForeHead := CLR_WHITE//CLR_BLACK
oBrw:nClrBackHead := 9129488//CLR_HCYAN 16436871
//Las dos lineas siguientes pone el color a linea que estas explorando
oBrw:nClrForeFocus := CLR_BLACK //CLR_WHITE
oBrw:nClrBackFocus := CLR_YELLOW //CLR_CYAN
/*
//Coloco lineas de distintos colores
oBrw:nClrPane := { || IF((OrdKeyNo()) % 2 == 0,;
16777184 , 16119285 ) } // 14481663
// oBrw:nRowCount() //Esto nos da el numero de lineas que se muestran el el browse
// oBrw:bLDblClick = { | nRow, nCol | EditCell( oBrw, nRow, nCol ) }
// oBrw:lNoLiteBar := .t. // Hace desaparecer la barra cursor del browse
// oBrw:lNoGrayBar := .t. // Hace desparecer la barra gris cuando pierde el foco
oBrw:lMChange := .t. // set false to prevent Mouse colm resize/drag
oBrw:lLogicDrop := .t. // use crazy logic dropbox
oBrw:lNoHScroll := .t. // don't use that pesky horiz scroll bar
// oBrw:nAdjColumn := 3 // expand this column to flush table right
// oBrw:nFreeze := 3 // This will freeze all & prevent horiz scrolling
// NOTE can't resize/drag on frozen columns
*/
oBrw:bKeyChar = { | nKey | zoom() } //Aqui puedes realizar el proceso de accion por tecla MsgInfo( nKey ) &(x_fun[5]) SI REA
//UNA FUNCION PUEDES REALIZAR DISTINTAS COSAS DEPENDIENDO DE LA TECLA PULSADA
//oBrw:bLDblClick := { | nRow, nCol | EditCell( oBrw, nRow, nCol ) } //Para definir una accion cuando se pulse dobleclic
oBrw:bLDblClick := { | nRow, nCol | zoom() } //Con el dobleclic muestro el registro. &(x_fun[5])
oBrw:bRClicked := { | nRow, nCol | ShowPopup( nRow, nCol, oBrw ) }
oWndEdit:oClient := oBrw //Hago que el browse se adapte al espacio que le queda libre
//----------------------------------------------------------------------------//
// Sistema de SPLITTER. objeto oSpl //
//----------------------------------------------------------------------------//
@ 1, 124 SPLITTER oSpl ;
VERTICAL ;
PREVIOUS CONTROLS oOut ;
HINDS CONTROLS oBrw;
LEFT MARGIN 100;
RIGHT MARGIN 200 ;
SIZE 4, oWnd:nHeight() PIXEL ;
OF oWndEdit ;
_3DLOOK ;
UPDATE
oBrw:goTop()
oBrw:goBottom()
oBrw:SetFocus() //activo el browse
Re: Última linea al final del browse
Posted: Fri Dec 20, 2013 9:40 pm
by cnavarro
Andres
Quizas tengas que definir un bGoBottom teniendo en cuenta, según creo, que la DATA nDataRows nos dice cuantos datos estamos viendo y restando dicho valor al ultimo registro para posicionarnos en el.
Como no estoy seguro que dicha DATA nDataRows tenga dicha informacion, podríamos obtener las filas visibles de esta otra forma:
nFilas := Int( BrwHeight()/DataHeight() )
Es una idea
Re: Última linea al final del browse
Posted: Sat Dec 21, 2013 2:44 am
by Marcelo Via Giglio
Hola,
esto funciona, o es otra cosa la que deseas hacer
Code: Select all
#include "fivewin.ch"
#include "xbrowse.ch"
function main()
local odlg, obrw
use customer new
DEFINE DIALOG odlg FROM 10,10 TO 40,90
@1,1 XBROWSE obrw ALIAS "customer" OF odlg
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTER ON INIT ( oDlg:oClient := oBrw, oDlg:Resize(), obrw:gotop(), obrw:gobottom() )
use
return nil
saludos
Marcelo
Re: Última linea al final del browse
Posted: Wed Dec 25, 2013 7:37 pm
by Andrés González
Solucionado, el problema que tenía por si alguien le sucede eran los scopes, que me volvian a situar el registro en un determinado punto. Si situo el gotop y gobottom allí ya funciona. Gracias a todos por ayudarme a descubrir el error.
Code: Select all
********************************
function setScope(v_op)
//Realiza un filtro rapido por el indice activo.
local x_rec := recno()
DEFAULT v_op := 1
if !Empty(x_scope1[v_op])
oBrw:Gotop()
//oBrw:Refresh()
if !Empty(x_scope2[v_op])
OrdScope(0, &(x_scope1[v_op]))
OrdScope(1, &(x_scope2[v_op]))
else
OrdScope(0, &(x_scope1[v_op]))
OrdScope(1, &(x_scope1[v_op]))
endif
dbGotop()
else
OrdScope( 0, Nil )
OrdScope( 1, Nil )
endif
goto x_rec
oBrw:Gotop()
oBrw:Gobottom()
return nil