Nem percebi que não postei a rotina alterada pra essa outra forma.
Não lembro se em alguma situação preciso da coluna atual do tbrowse, porque numa situação dessas já invalida a rotina.
No meu caso prefiro rotinas genéricas, assim é como se fossem uma LIB, sem ficar duplicando fonte.
Código: Selecionar todos
#include "inkey.ch"
PROCEDURE Main
LOCAL oTBrowse, oKeys
SetMode( 25, 80 )
SET COLOR TO W/B,N/W,,,W/B
CLS
USE \jpa\cordeiro\jpcadas
oTBrowse := { ;
{ "CODIGO", { || jpcadas->cdCodigo } }, ;
{ "NOME", { || Left( jpcadas->cdNome, 10 ) } }, ;
{ "ENDERECO", { || Left( jpcadas->cdEndereco, 10 ) } }, ;
{ "CIDADE", { || Left( jpcadas->cdCidade, 10 ) } }, ;
{ "UF", { || jpcadas->cdUF } } }
oKeys := { ;
{ K_ENTER, { || AlgumaCoisa() } }, ;
{ K_F2, { || AlgumaCoisa() } } }
FazBrowse( oTBrowse, oKeys )
CLOSE DATABASES
RETURN
STATIC FUNCTION AlgumaCoisa()
RETURN NIL
FUNCTION FazBrowse( oTBrowse, oKeys )
LOCAL oBrowse, nCont, nKey
oBrowse := tbrowsedb( 1, 1, MaxRow(), MaxCol() )
oBrowse:HeadSep := Chr(196)
oBrowse:FootSep := Chr(196)
oBrowse:ColSep := ""
IF oTBrowse == NIL
// tbrowse pra estrutura do dbf, caso não seja indicado o array
ELSE
FOR nCont = 1 TO Len( oTBrowse )
oBrowse:AddColumn( tbColumnNew( "|", { || "|" } ) ) // pra colocar separador de colunas
oBrowse:AddColumn( tbColumnNew( oTBrowse[ nCont, 1 ], oTBrowse[ nCont, 2 ] ) )
NEXT
ENDIF
IF .NOT. oKeys == NIL
FOR nCont = 1 TO Len( oKeys )
oBrowse:SetKey( oKeys[ nCont, 1 ], oKeys[ nCont, 2 ] )
NEXT
ENDIF
oBrowse:RefreshAll()
DO WHILE .T.
DO WHILE .NOT. oBrowse:Stable()
oBrowse:Stabilize()
ENDDO
nKey := Inkey(0)
IF nKey == K_ESC
EXIT
ENDIF
oBrowse:ApplyKey( nKey )
ENDDO
RETURN NIL