O novo fonte ajustado para um browse genérico.
#include "inkey.ch"
MEMVAR arq, cSair, prmzero, nSol
PROCEDURE Main
LOCAL csel := "SELECT ...", Conexao, nProvTar := 1, oRs
Conexao := Conectado( nProvTar )
Conexao:Open()
oRs := conexao:Execute( cSel )
novobrowseado( 5, 3, MaxRow() - 7, MaxCol() - 2, @oRs, { | tb, k, rs | RotinaDesteBrowse( tb, k, rs ) } )
RETURN
FUNCTION RotinaDesteBrowse( otb, nKey, ors )
LOCAL opRet
(otb)
DO WHILE .t.
IF nKey = K_ENTER
arq=oRs:Fields("nrtarefa"):Value
chmfunc("entersql",arq,"S")
ELSEIF nKey == K_ESC
@ maxrow()-1,1 prompt "Finalizar consulta"
@ maxrow()-1,24 prompt "Reabrir mesmo item"
@ maxrow()-1,46 prompt "Refazer mesma consulta"
@ maxrow()-1,70 prompt "Incluir sem prioridade"
@ maxrow()-1,94 prompt "Incluir solucionados"
@ maxrow()-1,116 prompt "Incluir sem prioridade e solucionados"
MENU to opret
DO CASE
CASE opret=0 .OR. opret=1
cSair="S"
CASE opret=2
chmfunc("entersql",arq,"S")
CASE opret=4
prmzero="N"
CASE opret=5
nsol="S"
CASE opret=6
prmzero="N"
nsol="T"
ENDCASE
EXIT
ENDIF
ENDDO
RETURN NIL
#include "tbrowse.ch"
FUNCTION novobrowseado( nTop, nLeft, nBottom, nRight, oRs, bFuncao )
LOCAL I, oColumn, nFieldLen, nLen, nKey, oTBrowse
keysec(27,1000,-1,.t.)
CLS
oTBrowse := TBrowseDB():new( nTop, nLeft, nBottom, nRight )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nLen := oRs:fields():count() - 1
FOR i := 0 TO nLen
oColumn := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
IF ValType( oRs:Fields(i):Value ) == "D"
nFieldLen := Len( Dtoc( Date() ) )
ELSE
nFieldLen := Min( oRs:Fields(I):DefinedSize, 50 )
ENDIF
oColumn:Width := Max( nFieldLen, Len( oRs:fields(i):name ) )
oTBrowse:addColumn( oColumn )
NEXT
DO WHILE .T.
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
nKey := Inkey(0)
DO CASE
OTHERWISE
IF bFuncao != NIL
Eval( bFuncao, oTBrowse, nKey, oRs )
ENDIF
ENDCASE
ENDDO
RETURN .t.
E... como eu já disse... só copiar o que falta PARA O BROWSE, da rotina que funciona
Sem tratamento de teclas, não tem funcionamento de teclas... é simples assim.