Funcao para o Tbrowse

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

negrao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 06 Jul 2004 08:38

Funcao para o Tbrowse

Mensagem por negrao »

Pessoal, to com o seguinte problema.
Estou querendo criar uma funcao unica para montar o Tbrowse e nada esta dando certo. So consegui mostrar na tela o layout dos dados mas o conteudo nao.
Abaixo estao as linhas da funcao que estou fazendo:
Nao precisa ser necessariamente assim, podera ser de outra forma.

Obrigado

Código: Selecionar todos

#include 'INKEY.CH'

Procedure Main(cParam)
   LOCAL lSaida, nKey, bFilter
   local nx := 1
   local otbc
   local otbr := tbrowsedb()
   CLEAR MEMORY
   CLS

   AEST := {}
   aadd(aest,{ 'CODI', 'N', 05, 0,'codigo ' })
   aadd(aest,{ 'nome', 'C', 40, 0,'nome ' })
   aadd(aest,{ 'ende', 'C', 25, 0,'endereco ' })
   aadd(aest,{ 'bair', 'C', 20, 0,'bairro ' })
   DBUSEAREA(.T.,'',"clientes.dbf",'cli',.T.)

   FOR NX := 1 TO LEN(AEST)
      otbc := tbcolumnNew(alltrim(aest[nx,5]),aest[nx,1] )
      otbr:addcolumn(otbc)

      oTbr:HeadSep:= "Í"
      oTbr:ColSep := "³"  
      lSaida := .F.
   NEXT

   DO WHILE !lSaida
      DO WHILE !oTbr:stabilize() .AND. NEXTKEY() == 0
      ENDDO

      nKey := InKey(0)

      DO CASE
          CASE NKEY == K_ESC ; EXIT
          OTHER
      ENDCASE
      oTbr:refreshALL()
   ENDDO
RETURN .T
Neuber Ramos
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 06 Jul 2004 10:52
Localização: São Paulo
Contato:

RE: Função única para Tbrowse

Mensagem por Neuber Ramos »

Olá, abaixo a função que vc precisa para criar um único Browse.
Dá uma estudada nos parämetros que funciona show de bola, só que utilizo a Visual Lib 2.0....

Abraço

Neuber Ramos.

Código: Selecionar todos

////////////////////////////////////////////////////////////////////////////
//  Nome..........: BROWTELA.PRG
//  Programador ..: Neuber Ramos
//  Data..........: 19 Maio de 1998
//  Descricao.....: Apresenta dados em tela
////////////////////////////////////////////////////////////////////////////
#include "Inkey.ch"
#include "SetCurs.ch"
#include "Visual2.ch"
#include "Cwm.ch"

Function BrowseTela(nTop, nLeft, nBottom, nRight, nOp)

Static bInsToggle := {|| SetCursor( If( ReadInsert( !ReadInsert() ),;
                         SC_NORMAL, SC_INSERT ))}     //Code Block para cursor

Local oB, n, lMore, cScrSave, lAppend, lKillAppend,;
      nKey, nCursSave, lGotKey, bKeyBlock

Local aNomeCamp:={}

        If ( !Used() )
            Return (.F.)                      // Se nao tem arquivo aberto
        Endif

        If ( PCount() < 4 )
            nTop := 4
            nLeft := 4
            nBottom := 20
            nRight := 76
        Endif
        Win(03, 03, 21, 77, "Pesquisados",WT_VERM1CINZA,WD_VERM1CINZA)
        BoxCor(04,04,20,76,LinMenu)

        oB := TBrowseDB(nTop + 2, nLeft + 1, nBottom - 1, nRight - 1)
        oB:headSep := "Ä"
        oB:skipBlock := {|x| Skipped(x, lAppend)}   // Cria  TBrowse object

        DO Case
           Case nOp=0 // CLIENTES
               AADD(aNomeCamp,{"Nome","Cpf","Rg","Data Inc.","Data Nasc.","1a.Descri‡Æo",;
                               "2a.Descri‡Æo","2a.Descri‡Æo","Fone","Endere‡o",;
                               "Bairro","Cidade","Estado","Cep"})

           Case nOp=1  // FILMES
               AADD(aNomeCamp,{"C¢digo","Nome","Nome Orig","Gˆnero","Diretor",;
                               "InlcusÆo","Distribuidora","Ator","Ator2","Ator3"})

           Case nOp=2 // CONFERENCIA DE ACERVO
             AADD(aNomeCamp,{"Filme","Dig.","Conf.","Div.","Nome do Filme"})

           Case nOp=3 // PESQUISA CLIENTE
               AADD(aNomeCamp,{"C¢digo","Titular","Telefone"})

           Case nOp=4 // PESQUISA CLIENTE
               AADD(aNomeCamp,{"C¢digo","Dependente","Titular","Telefone"})

           Case nOp=5 // PESQUISA CLIENTE
               AADD(aNomeCamp,{"Telefone","C¢digo","Titular"})

           Case nOp=6 // PESQUISA CARTOES DE CREDITO/DEBITO
               DbGotop()
               AADD(aNomeCamp,{"C¢digo","Bandeira","Data Cadastro","N§ Opera‡äes",;
						             "N§ Estornos","Total Acumulado","Total Estornado",;
                               "Deb/Cr‚d","élt. Movto","élt. Cliente","Prz. Pagto",;
                               "Mov. Janeiro","Est. Janeiro","Mov. Fevereiro","Est. Fevereiro",;
                               "Mov. Março","Est. Março","Mov. Abril","Est. Abril","Mov. Maio",;
                               "Est. Maio","Mov. Junho","Est. Junho","Mov. Julho","Est. Julho",;
                               "Mov. Agosto","Est. Agosto","Mov. Setembro","Est. Setembro",;
                               "Mov. Outubro","Est. Outubro","Mov. Novembro","Est. Novembro",;
                               "Mov. Dezembro","Est. Dezembro"})
           Case nOp=7 // PESQUISA DE CONTAS A PAGAR.
               DbGoTop()
               AADD(aNomeCamp,{"C¢digo","Parcela","Descricao reduzida","Posicao","Valor da parcela",;
                               "Documento","Emissao","Inclusao","Funcionario","Fornecedor",;
                               "Descricao completa","Valor total","Fixo ou Variavel","Vencimento",;
                               "Dias aviso"})
        
        EndCase


        For n := 1 To FCount()                      // adiciona uma coluna
            oB:addColumn(TBColumnNew(aNomeCamp[1][n],FieldBlock(FieldName(n))))
        Next

        If (Eof())
            DbGotop()
        Endif

        lAppend := lKillAppend := .F.               //Inicio
        nCursSave := SetCursor(0)
        While ( !oB:stabilize() ) ; End While

        If ( LastRec() == 0 )
             nKey := K_DOWN            // Arquivo
             lGotKey := .t.
        Else
             lGotKey := .f.
        Endif

        lMore := .t.
        While (lMore)
            If ( !lGotKey )
                While ( !oB:stabilize() )          // Esbilizacao sera interropida
                    If ( (nKey := Inkey()) != 0 )  // aperatar uma tecla keystroke
                         lGotKey := .t.
                         Exit
                    Endif
                End While
            Endif

            If ( !lGotKey )
                If ( oB:hitBottom )   // O objeto TBrowse esta stable
                    If ( !lAppend .or. RecNo() != LastRec() + 1 )
                        If ( lAppend )
                            oB:refreshCurrent()
                            While ( !oB:stabilize() ) ; End While
                            DbGoBottom()
                        Else
                            lAppend := .t.
                            SetCursor( If(ReadInsert(), SC_INSERT, SC_NORMAL) )
                        Endif

                        oB:down()
                        While ( !oB:stabilize() ) ; End While
                        oB:colorRect({oB:rowPos,1,oB:rowPos,oB:colCount},{2,2})
                    Endif
                Endif
                oB:Freeze=2
                Statline(oB, lAppend)
                While ( !oB:stabilize() ) ; End While
                nKey := Inkey(0)
                If (RecNo()=LastRec().and.nKey==24).or.(RecNo()=Lastrec().and.nKey==3)
                   Loop
                Endif
                If ( (bKeyBlock := SetKey(nKey)) != NIL )
                    EVAL(bKeyBlock, ProcName(1), ProcLine(1), "")
                    Loop
                Endif
            Else
                lGotKey := .f.
            Endif

            do Case  // tratamento do retorno
               Case ( LastKey()==13 )
                    If nOp>=3 .and. nOp<=5
                       Cod01 := STR(CODIGO)
                    Elseif (nOp == 6)
                       nCart := CODCART               
                    Else
                       If (nOp == 7)
                          nCodConta := CODIGOCONT    
                       EndIF
                    EndIF
                    lMore := .f.
               Case ( nKey == K_DOWN )
                     If ( lAppend )
                         oB:hitBottom := .t.
                     Else
                         oB:down()
                     Endif

               Case ( nKey == K_UP )
                     If ( lAppend )
                         lKillAppend := .t.
                     Else
                         oB:up()
                     Endif

               Case ( nKey == K_PGDN )
                     If ( lAppend )
                         oB:hitBottom := .t.
                     Else
                         oB:pageDown()
                     Endif

               Case ( nKey == K_PGUP )
                     If ( lAppend )
                         lKillAppend := .t.
                     Else
                         oB:pageUp()
                     Endif

               Case ( nKey == K_CTRL_PGUP )
                     If ( lAppend )
                         lKillAppend := .t.
                     Else
                         oB:goTop()
                     Endif

               Case ( nKey == K_CTRL_PGDN )
                     If ( lAppend )
                         lKillAppend := .t.
                     Else
                         oB:goBottom()
                     Endif

               Case ( nKey == K_RIGHT )
                     oB:Right()

               Case ( nKey == K_LEFT )
                     oB:Left()

               Case ( nKey == K_HOME )
                     oB:home()

               Case ( nKey == K_END )
                     oB:End()

               Case ( nKey == K_CTRL_LEFT )
                     oB:panLeft()

               Case ( nKey == K_CTRL_RIGHT )
                     oB:panRight()

               Case ( nKey == K_CTRL_HOME )
                     oB:panHome()

               Case ( nKey == K_CTRL_END )
                     oB:panEnd()

               Case ( nKey == K_INS )
                     If ( lAppend )
                         EVAL(bInsToggle)
                     Endif

               Case ( nKey == K_DEL )
                     If ( RecNo() != LastRec() + 1 )
                         If ( Deleted() )
                              recall
                         Else
                              delete
                         Endif
                     Endif

               Case ( nKey == K_ESC )

                    lMore := .f.   //Sai do Browse

               otherwise
                    If ( nKey >= 32 .and. nKey <= 255 )
                         KeyBoard Chr(K_RETURN) + Chr(nKey)
                    Endif
               EndCase

               If ( lKillAppend )

                   lKillAppend := .f.
                   lAppend := .f.

                   FreshOrder(oB)
                   SetCursor(0)

               Endif
        End While

	SetCursor(nCursSave)

Return (.T.)

///////////////////////////////////////////////////////////////////////////////
//       ExitKey()
//
//       Determine the follow-up action after editing a Field
///////////////////////////////////////////////////////////////////////////////

static func ExitKey(lAppend)

Local nKey

        nKey := Lastkey()
        If ( nKey == K_PGDN )

            If ( lAppend )               // move down If not Append mode
                nKey := 0
            Else
                nKey := K_DOWN
            Endif

        ElseIf ( nKey == K_PGUP )

                If ( lAppend )           // move up If not Append mode
                    nKey := 0
                Else
                    nKey := K_UP
                Endif

        ElseIf ( nKey == K_RETURN .or. (nKey >= 32 .and. nKey <= 255) )

                nKey := K_RIGHT         // Return Key or Type out..move Right

        ElseIf ( nKey != K_UP .and. nKey != K_DOWN )

                nKey := 0               // no other action
        Endif

Return (nKey)


///////////////////////////////////////////////////////////////////////////////
//       FreshOrder()
//
//       Refresh respecting any change in  order
///////////////////////////////////////////////////////////////////////////////

static func FreshOrder(oB)

Local nRec

        nRec := RecNo()
	oB:refreshAll()


        While ( !oB:stabilize() ) ; End While     // stabilize To see If TBrowse
                                            // moves the record pointer
        If ( nRec != LastRec() + 1 )

             While ( RecNo() != nRec )   //record pointer may move If
                                         //Bof is on Screen falls through
                 oB:up()                 //unless record is closer To Bof
                 While ( !oB:stabilize() ) ; End While   //than before
             End While
        Endif

Return (Nil)


///////////////////////////////////////////////////////////////////////////////
//       Statline()
//
//       display status at coordinates relative To TBrowse object
///////////////////////////////////////////////////////////////////////////////

static Func Statline(oB, lAppend)

Local nTop, nRight

	nTop := oB:nTop - 1
	nRight := oB:nRight

        @ nTop, nRight - 31 Say "Record"
        If ( LastRec() == 0 .and. !lAppend )

            @ nTop, nRight - 20 Say "<none>               " // File is Empty

        ElseIf ( RecNo() == LastRec() + 1 )

            @ nTop, nRight - 40 Say "         "              // no record number
            @ nTop, nRight - 20 Say "                <new>"  //If Eof

        Else

           @ nTop, nRight - 40 Say If(Deleted(), "<Deleted>", "         ")
           @ nTop, nRight - 25 Say " "+Pad(Ltrim(Str(RecNo())) + "/" +;
           Ltrim(Str(LastRec())), 16) +;
           If(oB:hitTop, "<Inicio>", "        ")

        Endif

Return (Nil)


///////////////////////////////////////////////////////////////////////////////
//       Skipped(n)
//
//       Skip thru database and Return the
//       actual number of records skipped
///////////////////////////////////////////////////////////////////////////////

static Func Skipped(nRequest, lAppend)

Local nCount

	nCount := 0
        If ( LastRec() != 0 )
            If ( nRequest == 0 )

                Skip 0

            ElseIf ( nRequest > 0 .and. RecNo() != LastRec() + 1 )
                 While ( nCount < nRequest )
                        Skip 1
                        If ( Eof() )

                            If ( lAppend )
                                nCount++       // Eof record allowed If
                            Else               // Append mode
                                               // back To last actual record
                                Skip -1

                            Endif

                            Exit

                        Endif
                        nCount++
                    End While

            ElseIf ( nRequest < 0 )

                 While ( nCount > nRequest )
                        Skip -1
                        If ( Bof() )
                            Exit
                        Endif

                        nCount--
                 End While
            Endif
        Endif

Return (nCount)
negrao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 06 Jul 2004 08:38

Obrigado

Mensagem por negrao »

Neuber Ramos, obrigado pela ajuda,sua funcao foi muito util
Responder