Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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?
Anexos
TELA1.jpg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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...


alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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...

[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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 ?
Anexos
Image2.jpg
Image1.jpg
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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)"}}
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem por EANDRIOLI »

...

É isso mesmo... deu certo!!!

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

Muito obrigado!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem por JoséQuintas »

Seria interessante se isso fizesse parte do Harbour, mas por compabilidade com Clipper, não devem alterar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Coluna separado para os CAMPOS de Cabeçalho em TBROWSE

Mensagem 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
Responder