Amigo Alexandre obrigado pela ajuda.
Em suas palavras puder perceber que a maneira que estou usando o TBROWSER em meus sistemas está diferentes do amigo.
Sou muito grato aos amigos deste fórum que fez renascer em mim o amor que sinto pelo xBase e hoje voltando a programar encontrei tempo para novos projetos. Aproveito para compartilhar meu código para que possam dizer se está correto ou se existe um método mais fácil e eficaz.
Na grande maioria dos meus TBROWSER's é necessário fazer um filtro antes e controlar a apresentação dos dados somente da condição pré-estabelecida.
Código: Selecionar todos
//// Rela‡äes ////
sele AL_ITPED
DBSETORDER(1)
ORDSCOPE(0,v_codp+v_codc)
ORDSCOPE(1,v_codp+v_codc)
///// FIM //////
sele AL_ITPED
DBSETORDER(1)
bfirst := {|| DBSEEK(v_codp+v_codc) }
blast := {|| DBSEEK(v_codp+v_codc, .T.), DBSKIP(-1)}
bwhile := {|| AL_ITPED->CODPED = v_codp .and. AL_ITPED->CODCLI = v_codc}
bfor := {|| .T. }
SETCOLOR("b+/b,w+/,,,n/bg")
aMensagem := { "<INS>-Inclus„o <ENTER>-Altera <DEL>-Exclus„o <F2>-NF. <F5>-MÆo-de-Obra","<F6>-Autoriza‡Æo <F7>-Recal/PG <F8>-Classif.<F9>-Desc.<F10>-KIT <F11>=TP <F12>"}
aCoordenadas:={09,01,21,78}
@ aCoordenadas[1]-1, aCoordenadas[2]-1, aCoordenadas[3]+2+LEN(aMensagem), aCoordenadas[4]+1 BOX cBox1
@ 21,01 say REPL("Ü",78)
SETCOLOR("w+/b,w+/,,,n/bg")
IF VALTYPE(aMensagem) == "A"
FOR I := 1 TO LEN(aMensagem)
@ aCoordenadas[3]+1+I, aCoordenadas[2] SAY PADC(aMensagem[I],aCoordenadas[4]-aCoordenadas[2]+1) COLOR "W/B"
NEXT
ENDIF
oTab := MyBrowser( bWhile,bFor,bFirst,bLast, aCoordenadas[1], aCoordenadas[2], aCoordenadas[3]-2, aCoordenadas[4] )
oTab:colsep := " Û "
oTab:headsep:= "ßÛß"
FOR I = 1 TO LEN( aCamp )
IF VALTYPE(aCamp[I]) == "B"
oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
ELSE
oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
ENDIF
oTab:addColumn( oCol )
NEXT
@ oTab:nTop +2, oTab:nRight+1 SAY chr(30) COLOR Cor(21)
@ oTab:nBottom , oTab:nRight+1 SAY chr(31) COLOR Cor(21)
@ oTab:nBottom+1, oTab:nRight+1 SAY "" COLOR Cor(22)
@ oTab:nBottom+1, oTab:nLeft -1 SAY "" COLOR Cor(22)
SCROLL_UP := { oTab:nTop +2, oTab:nRight+1, oTab:nTop +2, oTab:nRight+1 } ; SCROLL_DOWN := { oTab:nBottom , oTab:nRight+1, oTab:nBottom , oTab:nRight+1 }
SCROLL_LEFT := { oTab:nBottom+1, oTab:nRight+1, oTab:nBottom+1, oTab:nRight+1 } ; SCROLL_RIGHT := { oTab:nBottom+1, oTab:nLeft -1, oTab:nBottom+1, oTab:nLeft -1 }
nCol_Reg := (oTab:nRight-oTab:nLeft+2) / LEN(aCamp)
nvAlt:=.F.
DO WHILE .T.
aCoordenadas:={08,01,21,78}
aTeclas := { ;
{ K_INS , "P_INSERE(v_codp,v_codc)" } ,;
{ K_DEL , "DELREGISTRO()" } ,;
{ K_ENTER , "ALTERAREG(v_codp,v_codc)" } ,;
{ K_F1 , "HELP()" } ,;
{ K_F2 , "NOTAF()" } ,;
{ K_F3 , "CALEN()" } ,;
{ K_F4 , "CALCU()" } ,;
{ K_F5 , "MAOOBRA()" } ,;
{ K_F6 , "BAIXAITENS(v_codp,v_codc)" } ,;
{ K_F7 , "PAGTOS()" } ,;
{ K_F8 , "CLASSIF()" } ,;
{ K_F9 , "DESCONTO()" } ,;
{ K_F10 , "IMPORTAKIT(v_codp,v_codc)" } ,;
{ K_F11 , "TEMPO(v_codp+v_codc,v_codp,v_codc)" } ,;
{ K_F12 , "QUADRO()" } }
SETCOLOR("w+/b,w+/,,,n/bg")
@ 21,01 say "IT->"+TRANS(AL_PEDID->QTDITE,"9999")+" OR->"+TRANS(AL_PEDID->ORCADO,"9,999,999.99")+" MO->"+TRANS(AL_PEDID->AMAOBR,"999,999.99")+" DE->"+TRANS(AL_PEDID->DESCON,"999,999.99")+;
" TOTAL-> "+TRANS( ( (AL_PEDID->ORCADO+AL_PEDID->AMAOBR)-AL_PEDID->DESCON),"99,999,999.99")
@ oTab:nBottom+1,oTab:nLeft SAY REPLICATE("°",oTab:nRight-oTab:nLeft+1) COLOR Cor(28)
nCol_ := oTab:nLeft+IF(ROUND((nCol_Reg*(oTab:colpos-1)),0)<=0,0,IF(oTab:colpos>=LEN(aCamp),LEN(aCamp)*nCol_Reg,ROUND(nCol_Reg*(oTab:colpos-1),0)))
@ oTab:nBottom+1,IF(nCol_+nCol_Reg>oTab:nRight,nCol_:=oTab:nRight-ROUND(nCol_Reg,0)+1,nCol_) SAY REPLICATE("Û",ROUND(nCol_Reg,0)) COLOR Cor(29)
oTab:refreshAll()
oTab:COLORRECT({oTab:rowpos,1,oTab:rowpos,oTab:COLCOUNT},{1,2})
DO WHILE ! oTab:stabilize()
nKey := inkey()
IF nKey <> 0 .AND. nKey <> K_ENTER
EXIT
ENDIF
ENDDO
nvAlt:=.F.
IF oTab:stable
nRow := ROW()
nCol := COL()
oTab:COLORRECT({oTab:ROWPOS,1,oTab:ROWPOS,oTab:COLCOUNT}, {5,2})
oTab:hilite()
DO WHILE ! oTab:stabilize() ; ENDDO
IF oTAB:hitbottom ; BEEP() ; Mensagem("Atingiu o final do arquivo",2) ; SETCURSOR(0) ; ELSEIF oTAB:hittop ; BEEP() ; Mensagem("Atingiu o in¡cio do arquivo",2) ; SETCURSOR(0) ; ENDIF
SETPOS( nRow, nCol )
nKey := 0
DO WHIL nKey == 0 ; nKey := Minkey(5, @nMRow, @nMCol, .T.) ; ENDDO
DO WHILE (!oTab:Stabilize()) ; ENDDO
ENDIF
IF nKey == K_UP ; oTab:UP()
ELSEIF nKey == K_DOWN ; oTab:DOWN()
ELSEIF nKey == K_LEFT ; oTab:LEFT()
ELSEIF nKey == K_CTRL_LEFT ; oTab:PANLEFT()
ELSEIF nKey == K_RIGHT ; oTab:RIGHT()
ELSEIF nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
ELSEIF nKey == K_PGUP ; oTab:PAGEUP()
ELSEIF nKey == K_CTRL_PGUP ; oTab:GOTOP()
ELSEIF nKey == K_PGDN ; oTab:PAGEDOWN()
ELSEIF nKey == K_CTRL_PGDN ; oTab:GOBOTTOM()
ELSEIF nKey == K_HOME ; oTab:HOME()
ELSEIF nKey == K_CTRL_HOME ; oTab:PANHOME()
ELSEIF nKey == K_END ; oTab:END()
ELSEIF nKey == K_CTRL_END ; oTab:PANEND()
ELSEIF nKey == K_ESC ; EXIT
ELSEIF nKey == M_LEFT
IF InRegion(SCROLL_UP) ; oTab:Up()
ELSEIF InRegion(SCROLL_DOWN) ; oTab:Down()
ELSEIF InRegion(SCROLL_LEFT) ; oTab:Right()
ELSEIF InRegion(SCROLL_RIGHT) ; oTab:Left()
ELSEIF InRegion(oTab:nTop, oTab:nLeft, oTab:nBottom, oTab:nRight)
nLeftCol := oTab:leftVisible ; nLeftCol := IF(nLeftCol == 0, 1, nLeftCol) ; nOffset := oTab:nLeft + oTab:colWidth(nLeftCol) + len(oTab:colSep) ; nPlace := 0
WHILE nMCol > nOffset ; nPlace++ ; nOffset += oTab:colWidth(nLeftCol + nPlace) + len(oTab:colSep) ; ENDDO
nRow := 1 + nMRow - oTab:nTop - 2 ; oTab:dehilite() ; oTab:colPos := nLeftCol + nPlace ; oTab:rowPos := nRow
ENDIF
ELSE
IF VALTYPE(aTeclas) == "A"
nPosicao := ASCAN(aTeclas, { | a | nKey == a[1] } )
IF nPosicao # 0
gTela=SAVESCREEN(00,00,24,79)
if (nPosicao==1 .and. AL_PEDID->impres#"*")
P_INSERE(v_codp,v_codc)
elseif (nPosicao==2 .and. AL_PEDID->impres#"*")
DELREGISTRO()
elseif (nPosicao==3 .and. AL_PEDID->impres#"*")
ALTERAREG(v_codp,v_codc)
nvAlt:=.T.
elseif nPosicao==4
HELP()
elseif nPosicao==5
NOTAFI(v_codp,v_codc)
elseif (nPosicao==6 .and. AL_PEDID->impres#"*")
CALEN()
elseif (nPosicao==7 .and. AL_PEDID->impres#"*")
CALCU()
elseif (nPosicao==8 .and. AL_PEDID->impres#"*")
MAOOBRA()
elseif nPosicao==9
BAIXAITENS(v_codp,v_codc)
elseif (nPosicao==10 .and. AL_PEDID->impres#"*")
PAGTOS()
elseif (nPosicao==11)
// Retirei a trava a pedido a Ivania
CLASSIF()
elseif (nPosicao==12 .and. AL_PEDID->impres#"*")
DESCONTO()
elseif (nPosicao==13 .and. AL_PEDID->impres#"*")
IMPORTAKIT(v_codp,v_codc)
elseif nPosicao==14
TEMPO(v_codp+v_codc,v_codp,v_codc)
elseif (nPosicao==15 .and. AL_PEDID->impres#"*")
QUADRO()
end
RESTSCREEN(00,00,24,79,gTela)
sele AL_ITPED
DBSETORDER(1)
oTab:GoTop()
oTab:PanHome()
Establ()
ENDIF
SET CURSOR OFF
ENDIF
ENDIF
ENDDO
RESTSCREEN(00,00,24,79,cArea)
SETCOLOR(cCorUso)
SETCURSOR(1)
ENDDO
RETURN NIL
***************************************************************************
STATIC FUNCTION Establ()
SET CURSOR OFF
oTab:refreshAll()
DO WHILE ( !oTab:stabilize() ); ENDDO
RETURN NIL
Aqui está o MYBROWSER.PRG.
Júlio.