Última linea al final del browse (SOLUCIONADO)

Post Reply
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Última linea al final del browse (SOLUCIONADO)

Post 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.
Last edited by Andrés González on Wed Dec 25, 2013 7:38 pm, edited 1 time in total.
Saludos

Andrés González desde Mallorca
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Última linea al final del browse

Post by Marcelo Via Giglio »

Hola,

intenta con oBrw:gotop() seguido de oBrow:goBottom()

nos comentas si funciona

saludos
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Última linea al final del browse

Post 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
   
Saludos

Andrés González desde Mallorca
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Última linea al final del browse

Post 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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Última linea al final del browse

Post 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
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Última linea al final del browse

Post 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
Saludos

Andrés González desde Mallorca
Post Reply