Exemplo de Tbrowse

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

carlosgustavo
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 08 Jul 2010 16:49
Localização: Santo Antonio do Pinhal

Exemplo de Tbrowse

Mensagem por carlosgustavo »

Tenho um banco de dados chamado clientes com os campos codigo, nome, rg, cpf, cep, cidade, estado, endereco, telefone e email e queria utilizar o tbrowse para exibi-los na tela.

Não faço a minima ideia de como se utiliza o Tbrowse().

Se der, por favor comentem as linhas.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Exemplo de Tbrowse

Mensagem por Toledo »

Carlos, procure usar a opção de busca do fórum, que fica no canto direito superior desta página. Basta digitar no campo busca o que você está procurando e depois clicar no botão Busca. Existe aqui no fórum vários tópicos falando sobre o TBrowse, e muitos com exemplos de código.

Segue abaixo um exemplo que tentei adaptar a estrutura do arquivo DBF que você passou.

Código: Selecionar todos

#include "inkey.ch"
clear
SET DATE BRITISH
SET CENTURY ON
SET SCOREBOARD OFF
/******************************************
* Voce tem que criar um vetor com a seguinte
* estrutura:
* {{"Nome_do_Campo","Picture","Titulo_da_Coluna"}}
* conforme exemplo abaixo.
******************************************/
PRIV aCampos:={{"codigo","9999","Codigo"},;
{"nome","@!","Nome do Cliente"},;
{"rg","@!","RG"},;
{"cpf","@R 999.999.999-99","CPF"},;
{"cep","@R 99.999-999","Cep"},;
{"cidade","@!","Cidade"},;
{"estado","@!","UF"},;
{"endereco","@!","Endereco"},;
{"telefone","@R (99)9999-9999","Telefone"},;
{"email",REPL("X",30),"E-mail"}}

USE CLIENTES ALIAS CLIENTES NEW  //Abrir o arquivo DBF
J_ANELA(2,3,20,76,"B+/BG","N/BG","W/BG"," (CADASTRO DE CLIENTES) ")
BRW_ARQ(2,3,20,76,aCampos)
retu


PROC BRW_ARQ
PARAMETERS brw_ls,brw_cs,brw_li,brw_ci,brw_campos
brw:=TBrowseNew(brw_ls+1,brw_cs+1,brw_li-1,brw_ci-1)

brw:colorspec := "B/BG,R/BG,G/BG,W+/W,N/BG"
brw:headsep:=chr(205)+chr(209)+chr(205)
brw:colsep:=" "+chr(179)+" "
brw:gotopblock({|| dbGoTop()})
brw:gobottomblock({|| dbGoBottom()})
brw:skipblock({|_1| MOV_PTR(_1)})

FOR i_=1 TO LEN(brw_campos)
 cp_titu:=brw_campos[i_,3]
 cp_masc:=brw_campos[i_,2]
 cp_:=brw_campos[i_,1]
 brw:addcolumn(tbcolumnnew(cp_titu,&("{||TRAN("+cp_+",["+cp_masc+"])}")))
 brw:getcolumn(i_):width := LEN(TRAN(&cp_.,cp_masc))

NEXT

volta_db=.t.
DO WHILE volta_db
   SETCOLOR("W+/B")
   SET CURSO OFF
   DO WHILE !brw:stabilize() .AND. NEXTKEY()=0
   ENDD
   READINSERT(.f.)
   x_ = COL() ; y_ = ROW()
   tecl_p=INKEY(0)
   carac_ = UPPER(CHR(tecl_p))
   SET CURSO ON
   brw:dehilite()
   DO CASE
         CASE tecl_p = K_ESC
            volta_db=.f.
         CASE tecl_p = K_UP
              brw:up()
         CASE tecl_p = K_DOWN
            brw:down()
         CASE tecl_p = K_RIGHT
            brw:right()
         CASE tecl_p = K_LEFT
            brw:left()
         CASE tecl_p = K_HOME   
            brw:home()
         CASE tecl_p = K_END   
            brw:end()
         CASE tecl_p = K_PGUP   
            brw:pageup()
         CASE tecl_p = K_PGDN   
            brw:pagedown()
         CASE tecl_p = K_CTRL_PGDN
            brw:gobottom()
         CASE tecl_p = K_CTRL_PGUP
            brw:gotop()
         CASE tecl_p = K_CTRL_END   
            brw:panend()
         CASE tecl_p = K_CTRL_HOME   
            brw:panhome()
         CASE tecl_p = K_CTRL_LEFT   
            brw:panleft()
         CASE tecl_p = K_CTRL_RIGHT   
            brw:panright()
            

   ENDC
ENDD
SET CURSO ON
RETU

FUNC MOV_PTR(a_pular)
LOCAL ja_pulado := 0, chv_
IF a_pular = 0
   SKIP 0
ELSE
   DO WHILE !EOF() .AND. !BOF() .AND.;
      a_pular != ja_pulado
      IF a_pular > 0
         SKIP
         ja_pulado++
      ELSE
         SKIP -1
         ja_pulado--
      ENDI
   ENDD
   IF EOF() .OR. BOF()
      IF a_pular > 0
         GO BOTTOM
         ja_pulado--
      ELSE
         GO TOP
         ja_pulado++
      ENDI
   ENDI
ENDI
RETU ja_pulado

FUNCTION J_ANELA
PARAMETERS L1,C1,L2,C2,C_OR1,C_OR2,C_OR3,T_ITULO
CORR=SETCOLOR()
SET COLOR TO &C_OR1
@ L1,C1 CLEAR TO L2,C2
@ L1,C1 SAY 'Ú'+REPLICATE(CHR(196),C2-C1-1)+'¿'
SET COLOR TO &C_OR3
@ L1,(80-LEN(T_ITULO))/2 SAY T_ITULO
FOR A=L1+1 TO L2-1
   SET COLOR TO &C_OR1
   @ A,C1 SAY '³'
   SET COLOR TO &C_OR2
   @ A,C2 SAY '³'
NEXT A
SET COLOR TO &C_OR2
@ L2,C1 SAY 'À'+REPLICATE(CHR(196),C2-C1-1)+'Ù'
SETCOLOR(CORR)
RETURN
Eu não testei, mas acho que vai funcionar sem problemas.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: Exemplo de Tbrowse

Mensagem por rubens »

Aproveitando o tópico...

Tenho uma função no achoice que me dá opção de selecionar um item e deixar ele marcado.. Gostaria de fazer a mesma coisa com o tbrowse... alguem sabe como..?
Eu estou modificando o contas a receber de forma que eu selecione o cliente e ele me mostre todas as "notinhas desse cliente" no achoice... mas alguns clientes tem mais de 110 "notinhas" daí dá um erro no achoice. Acho que deve ter algum limite. Então parti para o Tbrowse. Consegui selecionar condicionalmente as colunas mas uma linha não consigo. A intenção é pressionar a barra de spaço em uma determinada linha e ela ficar marcada de outra cor.. com a coluna consigo fazer mas nao consigo com a linha...
Outra coisa quando crio o tbrowse os dados são carregados para a memória ou a minupalação é feita direta no dbf.. ???

Vlw..

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Exemplo de Tbrowse

Mensagem por Toledo »

Rubens, segue em anexo um exemplo do que você pode fazer.

Abraços,
Anexos
brwcor.zip
Exemplo de TBrowse com alteração da cor da linha ao pressionar barra de espaço
(2.06 KiB) Baixado 774 vezes
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: Exemplo de Tbrowse

Mensagem por rubens »

Toledo...
Resolveu sim o problema que eu tinha... mas agora surgiu outra dúvida...
veja o screen abaixo:
Imagem

Estou usando o código abaixo dentro do Tbrowse. Gostaria que exibisse a linha inteira quando movimentasse o cursor como está na figura na ultima linha, e quando tivesse algum conta vencida ele mostrasse de cor diferente como está na linha COLUNA:COLORBLOCK:={ || IF( DIASV()>1 ,{8,1},{1,2})}
Mas parece que não aceita duas condições. Sempre fica a ultima condição... daí quando aperta barra de espaço para ficar selecionada, alinha de fundo vermelho não gera a linha inteira. Se mudo a linha oTAB:GETCOLUMN(I):COLORBLOCK:={ || IF( CR->MARCADO,{6,1},{1,2})} para depois condição de vencida... a condição de vencida não aparece mais... tem como colocar essas duas condições ou só aceita uma mesmo.. ?
Vlw..

Rubens

Código: Selecionar todos

oTab:addColumn( oCol )
	oTAB:GETCOLUMN(I):COLORBLOCK:={ || IF( CR->MARCADO,{6,1},{1,2})}
	IF I=4
		COLUNA=oTAB:GETCOLUMN(I)
		COLUNA:COLORBLOCK:={ || IF( DIASV()>1  ,{8,1},{1,2})}
	ENDIF
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Exemplo de Tbrowse

Mensagem por Toledo »

Rubens, tente o seguinte:

Código: Selecionar todos

oTab:addColumn( oCol )
   oTAB:GETCOLUMN(I):COLORBLOCK:={ || IF( CR->MARCADO,{6,1},{1,2})}
   IF I=4
      COLUNA=oTAB:GETCOLUMN(I)
      COLUNA:COLORBLOCK:={||IF(DIASV()>1,IF(CR->MARCADO, {6,1},{8,1}),IF(CR->MARCADO,{6,1},{1,2}))}
   ENDIF
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: Exemplo de Tbrowse

Mensagem por rubens »

Exato...
Funcionou redondinho...

Vlw... Toledo.

Obrigado....


Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Exemplo de Tbrowse

Mensagem por billy1943 »

Vários colegas expõe suas dúvidas a respeito do TBrowse.
Eu já vou colocar uma dúvida maior ainda.

Para que serve mesmo o TBrowse ???

Há anos programo em Clipper, desde o Summer 87, e, francamente nada vi até hoje que o Tbrowse acrescentasse aos meus sistemas que o DbEdit(), Achoice() ou o próprio Browse(), nativos do Clipper não fizessem.

Inclusive quando habilito essas funções nos sistemas, o faço num tópico de verificação geral de arquivos, aconselhando o máximo de cuidado pois alterações ou exclusões ficam por conta e risco do cliente, tanto que só permito aos principais operadores do sistema o acesso aos bancos de dados.

Permito o máximo de verificações, filtrando campos, colocando inclusive todos eles como índices, tudo isso feito, quando possível, em uma cópia do arquivo. Enquanto isso o arquivo principal continua disponível a todo o sistema.
No TBrowse você precisa ter acesso exclusivo ao arquivo, não é ?

O TBrowse se assemelha, para mim, ao recurso do Delphi chamado Navigator, onde tem um botão para você ir ao primeiro registro, ao último, avançar, retroceder, que pode funcionar em arquivos muito pequenos mas impraticável em arquivos enormes.

Se alguém usa para valer o Tbrowse informe o que ele faz mais do que ir ao topo, ir ao fundo, isto é, andar como o Navigator do Delphi,colocar cor em linhas, editar campos com a máxima segurança.

Quando eu vejo em um sistema visual o componente Navigator...
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Re: Exemplo de Tbrowse

Mensagem por rbonotto »

Acho que uma das vantagens do TBrowse é quando existe um banco de dados muito grande e vc necessita de que ele mostre em mode browser
somente dados que correspondem a uma condição especifica.
Um exemplo que ocorreu comigo:

Tinha um cliente (ortodontista) que possuia seis cadeiras em seu consultorio, então haveria um dbf com o codigo do doutor, seis campos de cadeiras dividadas em 30 em 30 minutos de atendimento 6 dias por semana. Ele queria gerar a agenda de dois em dois anos....e quando
entrasse em um dia aparecesse as cadeiras (com seus agendamentos) divididas de 30 em 30 minutos.

O dbf ficou com ums 400 mil registros....nem pensar em usar filtro e remontar em temporarios, pois o cliente queria que se apertasse a tecla
pgdown ele automaticamente pulasse para outro dia, sempre em modeo browser....

Foi a unica vez que o Tbrowswe salvou meu couro, ficou realmente muito rapido, sendo que o cliente usou este programa por quinze anos até
que se aposentou.

Abraços =)
mixsistemas@gmail.com
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Exemplo de Tbrowse

Mensagem por Mário Isa »

alguém sabe como travar uma ou mais colunas ?
:)Pos
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Exemplo de Tbrowse

Mensagem por alxsts »

Olá!

Veja:

Código: Selecionar todos

   // quantidade de colunas a congelar (travar), contando da esquerda para a direita
   Local nToColsToFreeze := 2  

   oTbrowse:freeze := nToColsToFreeze 
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Exemplo de Tbrowse

Mensagem por Toledo »

Use a variável freeze do objeto TBrowse:

Código: Selecionar todos

brw:freeze := nColuna
nColuna é o número da coluna que você quer travar.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
lucimauro
Usuário Nível 3
Usuário Nível 3
Mensagens: 465
Registrado em: 21 Set 2004 21:02
Localização: Sobral-CE

Exemplo de Tbrowse

Mensagem por lucimauro »

obj_tbrawse:freeze:=2

No exmplo acima voce congela as 2 primeiras colunas
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Exemplo de Tbrowse

Mensagem por Mário Isa »

obrigado a todos.
Deu super certinho.
;)
Responder