Página 1 de 3

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 02 Dez 2015 08:33
por EANDRIOLI
Amigos, bom dia!


Como colocar coluna ou "|" separadora entre os campos, no TBROWSE.

No exemplo abaixo, como colocar entre os campos CÓDIGO e AQUISIÇÃO?

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 02 Dez 2015 09:12
por JoséQuintas
Acho que isso já passou por aqui.

O TBrowse tem lá as variáveis do separador de colunas, tanto dos campos, quanto do cabeçalho.

Vai parecer meio idiota dizer isto mas, o título é de acordo com a linha.
No primeiro caso é de forma automática, no segundo, se está montando a linha manualmente, vai ter que fazer o mesmo no título.

Código: Selecionar todos

oArray := { ;
   { "titulo", { || campo } }, ;
   { "titulo", { || campo } } }

// ou (não recomendo)

oArray := { ;
   { titulo + "|" + titulo + "|" + titulo, { || campo + "|" + campo + "|" + campo } } }
E tem as variáveis do tbrowse destinadas ao caractere separador:

Código: Selecionar todos

   oBrowse:HeadSep := Chr(205) 
   oBrowse:FootSep := Chr(196)
   oBrowse:ColSep  := Chr(179) 
É autoexplicativo (pra quem entende inglês)

HeadSep -> Header = titulo
FootSep -> Footer = rodapé
ColSep -> Column = coluna

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 02 Dez 2015 10:49
por EANDRIOLI
BOM DIA...

Estou usando assim e não está dando certo... em que posição colocar "|" pra que apareça separando os CAMPOS de CABEÇALHO:

Código: Selecionar todos

WIN(2,1,21,78,"VE╓CULOS LIBERADOS PARA VENDA",'GR+/N+*','N+*/W')
DBGOTOP()

PRIV aCampos:={{"codigo","999999","Código"},;
               {"data","999999","Aquisiçao"},;
               {"modelo","@!","Modelo e Descriçao do Veiculo"},;
               {"ano","9999","Ano/Mod"},;
               {"left(cor,4)","@!","Cor"},;
               {"vlr_venda","@E 999,999.99","Valor (V)"}}

BRW_ARQ(2,1,20,78,aCampos)

DESKTOP()
RSTENV(TEL_EST)
SET FILTER TO
RETURN

*****************
PROC BRW_ARQ
*****************
Local nTamNomeP:= 1
Local nQuantRegP:= 0
Local nQuantMaxR:= 60

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)

//...Prepara cores padrao para o TBrowse
brw:colorspec := "W+/B,G+/B,GR+/B,R+/B,GB+/B,RB+/B,W+/G,R*/B"
    
//...Prepara separadores de cabecalho e colunas
brw:headsep:=chr(205)+chr(209)+chr(205)
brw:colsep :=""+chr(179)+""   // Barra separadora colunas...
brw:footsep:=chr(205)         // Ultima linha...



Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 02 Dez 2015 12:36
por alxsts
Olá!

Teste assim:

Código: Selecionar todos

// Default column separator
#define DEF_CSEP  " " + chr(179) + " "

// Default heading separator
#define DEF_HSEP chr(196) + chr(194) + chr(196)

// Default footing separator
#define DEF_FSEP chr(196) + chr(193) + chr(196)

WIN(2,1,21,78,"VE+CULOS LIBERADOS PARA VENDA",'GR+/N+*','N+*/W')
DBGOTOP()

PRIV aCampos:={{"codigo","999999","Código"},;
       {"data","999999","Aquisiçao"},;
       {"modelo","@!","Modelo e Descriçao do Veiculo"},;
       {"ano","9999","Ano/Mod"},;
       {"left(cor,4)","@!","Cor"},;
       {"vlr_venda","@E 999,999.99","Valor (V)"}}

BRW_ARQ(2,1,20,78,aCampos)

DESKTOP()
RSTENV(TEL_EST)
SET FILTER TO
RETURN

*****************
PROCEDURE BRW_ARQ( brw_ls, brw_cs, brw_li, brw_ci, brw_campos )
*****************
Local nTamNomeP:= 1
Local nQuantRegP:= 0
Local nQuantMaxR:= 60
LOCAL brw

// 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)

//...Prepara cores padrao para o TBrowse
brw:colorspec := "W+/B,G+/B,GR+/B,R+/B,GB+/B,RB+/B,W+/G,R*/B"
  
//...Prepara separadores de cabecalho e colunas
brw:headsep := DEF_HSEP  // Header
brw:colsep  := DEF_CSEP  // Barra separadora colunas...
brw:footsep := DEF_FSEP  // Footer (Rodapé). Ultima linha...


Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 02 Dez 2015 16:06
por EANDRIOLI
Olá,

Fazendo a alteração sugerida, ocorre o seguinte erro:
++++++++++++++++++++ Internal Error Handling Information +++++++++++++++++++++

Subsystem Call ..: BASE
System Code .....: 1449
Default Status ..: False
Description .....: Erro de sintaxe
Operation .......: &
Arguments .......: [ 1] = Type: C Val: {||TRAN(codigo|,[999999])}
Involved File ...:
Dos Error Code ..: 0

Trace Through:
----------------
BRW_ARQ : 111 in Module: SIGMOVI.PRG
SIGMOVI : 77 in Module: SIGMOVI.PRG
(b)MAIN : 279 in Module: SIGARA.PRG
DWNEXECUTE : 1,241 in Module:
DOWNMENU : 993 in Module: VLIB.PRG
BAREXECUTE : 740 in Module:
BARMENU : 586 in Module: VLIB.PRG
MAIN : 553 in Module: SIGARA.PRG

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 02 Dez 2015 17:50
por JoséQuintas
Não sei se é pra rir ou chorar.

Quer ajuda no tbrowse ok, mas CADÊ ELE?

Mostrou a criação de um array com colunas... ok.... isso é a criação de um array

Mostrou a chamada de sua função.... ok... isso é a chamada de sua função.

Mostrou um pedaço da sua função.... ok...isso é um pedaço da sua função.

Mas tbrowse, e colunas usadas pelo tbrowse.... nenhum sinal.

Se nem sabe aonde está o tbrowse no fonte, fica complicado.

Está aí a primeira questão: aonde está o tbrowse?


Consultando uma bola mágica...
A julgar pelo erro:

Código: Selecionar todos

{||TRAN(codigo|,[999999])}
O erro é NA SUA rotina, e não no tbrowse.

Consultando a bola mágica novamente...

Provavelmente na SUA rotina, deve usar o array postado, pra converter pra colunas do tbrowse.

Consultar bola mágica foi necessário, já que não existe fonte postado com isso.

Primeiro entenda o que precisa no tbrowse.
Depois crie a função pra facilitar o uso.
Se criar função antes, a função já começa do jeito errado, que foi o que aconteceu.

Nota:
Diferente desse array, o array para o tbrowse possui título e conteúdo.
Ao invés de reinventar a roda, é só usar título e conteúdo.
Mas pra isso, tem que ajustar sua função, que não se sabe o que ela faz com as informações que recebe.

Nota2:

Também uma opção é pegar a mensagem de erro, que mostra fonte e linha do erro, e olhar lá.
BRW_ARQ : 111 in Module: SIGMOVI.PRG

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 02 Dez 2015 19:25
por JoséQuintas
fonte exemplo

Código: Selecionar todos


#include "inkey.ch"

PROCEDURE Main

   LOCAL oTBrowse

   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 } } }
   FazBrowse( oTBrowse )
   CLOSE DATABASES
   RETURN


STATIC FUNCTION FazBrowse( oTBrowse, bFuncaoUsuario )

   LOCAL oBrowse, nCont, oCol, nKey

   oBrowse := tbrowsedb( 1, 1, MaxRow(), MaxCol() )
   oBrowse:HeadSep   := Chr(205)
   oBrowse:FootSep   := Chr(196)
   oBrowse:ColSep    := Chr(179)
   FOR nCont = 1 TO Len( oTBrowse )
      oCol := tbColumnNew( oTBrowse[ nCont, 1 ], oTBrowse[ nCont, 2 ] )
      oBrowse:AddColumn( oCol )
   NEXT
   oBrowse:SkipBlock     := { | nSkip | FazBrowseSkip( nSkip ) }
   oBrowse:GoBottomBlock := { || FazBrowseGoBottom() }
   oBrowse:GoTopBlock    := { || FazBrowseGoTop() }
   oBrowse:RefreshAll()
   DO WHILE .T.
      DO WHILE .NOT. oBrowse:Stable()
         oBrowse:Stabilize()
      ENDDO
      nKey := Inkey(0)
      IF nKey == K_ESC
         EXIT
      ENDIF
      DO CASE
      CASE nKey == K_DOWN      ; oBrowse:Down()      ; LOOP
      CASE nKey == K_UP        ; oBrowse:Up()        ; LOOP
      CASE nKey == K_PGDN      ; oBrowse:PageDown()  ; LOOP
      CASE nKey == K_PGUP      ; oBrowse:PageUp()    ; LOOP
      CASE nKey == K_CTRL_PGDN ; oBrowse:GoBottom()  ; LOOP
      CASE nKey == K_CTRL_PGUP ; oBrowse:GoTop()     ; LOOP
      CASE nKey == K_HOME      ; oBrowse:GoTop()     ; LOOP
      CASE nKey == K_END       ; oBrowse:GoBottom()  ; LOOP
      CASE nKey == K_RIGHT     ; oBrowse:Right()     ; LOOP
      CASE nKey == K_LEFT      ; oBrowse:Left()      ; LOOP
      CASE bFuncaoUsuario != NIL
         Eval( bFuncaoUsuario ) // codeblock
      ENDCASE
   ENDDO
   RETURN NIL


STATIC FUNCTION FazBrowseGoTop()
   GOTO TOP
   RETURN NIL

STATIC FUNCTION FazBrowseGoBottom()
   GOTO BOTTOM
   RETURN NIL

STATIC FUNCTION FazBrowseSkip( nSkip )

   LOCAL nSkipped := 0

   IF .NOT. Eof()
     IF ( nSkip == 0 )
         SKIP 0
     ELSEIF ( nSkip > 0 .AND. .NOT. Eof() )
       DO WHILE nSkipped < nSkip
          SKIP
          IF Eof()
             GOTO BOTTOM
             EXIT
          ENDIF
          nSkipped++
       ENDDO
     ELSEIF ( nSkip < 0 )
       DO WHILE  ( nSkipped > nSkip )
          SKIP -1
          IF Bof()
             GOTO TOP
             EXIT
          ENDIF
          nSkipped--
       ENDDO
     ENDIF
   ENDIF
   RETURN ( nSkipped )
Resultado na tela
tbrowse.png

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 03 Dez 2015 02:54
por alxsts
Olá!

naquela linha "simplificando fontes", eu trocaria:

Código: Selecionar todos

	   oBrowse:GoBottomBlock := { || FazBrowseGoBottom() }
	   oBrowse:GoTopBlock    := { || FazBrowseGoTop() }
	   oBrowse:RefreshAll()
por

Código: Selecionar todos

	   oBrowse:GoBottomBlock := { || DbGoBottom() }
	   oBrowse:GoTopBlock    := { || DbGoTop() }
           
      oBrowse:GoTop() 
	   
      oBrowse:RefreshAll()   // ou oBrowse:GoTop():RefreshAll()
e eliminaria este código por ser desnecessário:

Código: Selecionar todos

STATIC FUNCTION FazBrowseGoTop()
   GOTO TOP
   RETURN NIL

STATIC FUNCTION FazBrowseGoBottom()
   GOTO BOTTOM
   RETURN NIL

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 03 Dez 2015 08:31
por EANDRIOLI
COLUNA ou SEPARADOR DE CABEÇALHO

Talvez amigos, eu esteja me expressando mal ou vocês não estão entendendo o que eu quero...

Preciso colocar a barra ou separador entre os CAMPOS de CABEÇALHO... as colunas claro que já consegui... vejam como fica com o DBEDIT...

Coloquei uma segunda imagem para vocês verem de perto como é no DBEDIT... é isso que preciso... no DBEDIT tinha essa possibilidade...

E no TBROWSE ?

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 03 Dez 2015 12:30
por Jairo Maia
Olá EANDRIOLI,

O José Quintas deu a dica mais acima que é colocar o separador a esquerda a partir da segunda coluna. Embora ele não recomenda, se usou a dica não funcionou? Com base no seu exemplo seria:
PRIV aCampos:={{"codigo","999999","Código"},;
{"data","999999",Chr( 179 )+"Aquisiçao"},;
{"modelo","@!",Chr( 179 )+"Modelo e Descriçao do Veiculo"},;
{"ano","9999",Chr( 179 )+"Ano/Mod"},;
{"left(cor,4)","@!",Chr( 179 )+"Cor"},;
{"vlr_venda","@E 999,999.99",Chr( 179 )+"Valor (V)"}}

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 03 Dez 2015 14:04
por EANDRIOLI
...

É isso mesmo... deu certo!!!

Agora é só questão de ajuste...

Muito obrigado!

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 03 Dez 2015 21:11
por JoséQuintas
O que não recomendo é usar uma única coluna, porque limita.

Usando aquele meu exemplo:

Código: Selecionar todos

   oTBrowse := { ;
      { Chr(179) + "CODIGO",   { || Chr(179) + jpcadas->cdCodigo } }, ;
      { Chr(179) + "NOME",     { || Chr(179) + Left( jpcadas->cdNome, 10 ) } }, ;
      { Chr(179) + "ENDERECO", { || Chr(179) + Left( jpcadas->cdEndereco, 10 ) } }, ;
      { Chr(179) + "CIDADE",   { || Chr(179) + Left( jpcadas->cdCidade, 10 ) } }, ;
      { Chr(179) + "UF",       { || Chr(179) + jpcadas->cdUF } } }
...
   oBrowse:ColSep    := ""
O resultado:
tbrowse.png
O único inconveniente é o traço fazer parte da coluna, o que não será problema se a linha toda ficar em destaque.

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 03 Dez 2015 21:40
por JoséQuintas
Seria interessante se isso fizesse parte do Harbour, mas por compabilidade com Clipper, não devem alterar.

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 03 Dez 2015 22:02
por JoséQuintas
Outra opção que talvez possa ser interessante, sem precisar converter nada, acrescentar o separador como se fosse coluna.
E continua mantendo o formato do tbrowse padrão pra montagem.

Somente a parte que interessa do exemplo que já postei.

Código: Selecionar todos

   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 } } }
   FazBrowse( oTBrowse )
   RETURN


STATIC FUNCTION FazBrowse( oTBrowse )

   LOCAL oBrowse, nCont, oCol, nKey

   oBrowse := tbrowsedb( 1, 1, 24, 80 )
   oBrowse:HeadSep   := Chr(196)
   oBrowse:FootSep   := Chr(196)
   oBrowse:ColSep    := ""
   FOR nCont = 1 TO Len( oTBrowse )
// -------------------------------------------------------- nestas duas linhas, uma coluna que será o separador
      oCol := tbColumnNew( "|", { || "|" } )
      oBrowse:AddColumn( oCol )
//-------------------------------------------------------
      oCol := tbColumnNew( oTBrowse[ nCont, 1 ], oTBrowse[ nCont, 2 ] )
      oBrowse:AddColumn( oCol )
   NEXT
O resultado é igual à tela anterior.

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Enviado: 04 Dez 2015 08:34
por EANDRIOLI
Bom dia amigo...

Ótimo isso... melhor ainda...

Os testes deram certo para os dois casos que os amigos comentaram... cada um com suas peculiaridades...

Na dúvida entrarei em contato...

Abraços,

Erasmo Andrioli