Página 1 de 2

Browse do GASPro zebrado

Enviado: 06 Mai 2015 23:48
por clodoaldomonteiro
Olá amigos!

Converti minha aplicação Clippers/Gas para xHarbour 1.00 e queria saber se tem como zebrar o browse, e/ou colocar uma tarja colorida na linha em esteja o foco.

Desde já agradeço a atenção de todos.

Browse do GASPro zebrado

Enviado: 07 Mai 2015 11:28
por frazato
Bom dia!
Faço assim, segue parte do codigo!

Código: Selecionar todos

*nMaxCol:= 90
                     nMaxLin:= nMaxRow
                     nJanGet:= CAIXATEXTO(00,00,nMaxLin-1,nMaxCol,"CADASTRO DE ENTIDADES","BG+/NB+","NN/NN","N")
                     _alias := 'Produto' // Dbf para Navegacao
                     _browse:= 'oTab'

                     If lViaFatura==.f.
                        BuildMenu( @hMenu, @hMenuItem )
                     endif

                     if !ToolBarGEN(nJanGet)
                         Return NIL
                     endif
                     SetInkeyAfterBlock({|nkey| AfterInkeyGEN( nkey ) })


                     oTab:=TbrowseDb(00,00,nMaxLin-1,nMaxCol)
                     oTab:ColSep    := " "
                     oTab:HeadSep   := "__"
                     oTab:ColorSpec := "n/ww+*,B/GR+*,N/w,N/W*+,g+*/ww+*"

                     Coluna1 := TbColumnNew("RAZAO SOCIAL",{ ||Forneced->codigo+'-'+Forneced->Razao } )
                     Coluna2 := TbColumnNew("Fantasia"    ,{ ||Forneced->Fantasia } )
                     Coluna3 := TbColumnNew("### Cnpj ###",{ ||Forneced->cgc } )
                     Coluna4 := TbColumnNew("I.E /RG"     ,{ ||Forneced->Ie } )
                     Coluna5 := TbColumnNew("Contato"     ,{ ||Forneced->Contato } )
                     Coluna6 := TbColumnNew("Endereco"    ,{ ||Forneced->Endereco } )
                     Coluna7 := TbColumnNew("Cidade  "    ,{ ||Forneced->cidade   } )
                     Coluna8 := TbColumnNew("Opcao Pagamento",{|| Iif(Forneced->Finan_001=='2',;
                                                                      '##   NEGOCIAR   ##',;
                                                                      Iif(Forneced->Finan_001=='3',;
                                                                      '##   NAO PAGAR  ##',;
                                                                      '## PAGAR EM DIA ##')) } )

                     Coluna9  := TbColumnNew("Prz.Entreg."  ,{ ||Forneced->PrzEntrg   } )
                     Coluna10 := TbColumnNew("TP.Contribuinte."  ,{ ||Ajusta_Campo10(Forneced->indiedest,.f.) } )

                   



                     oTab:AddColumn(Coluna1)
                     oTab:AddColumn(Coluna2)
                     oTab:AddColumn(Coluna3)
                     oTab:AddColumn(Coluna4)
                     oTab:AddColumn(Coluna5)
                     oTab:AddColumn(Coluna6)
                     oTab:AddColumn(Coluna7)
                     oTab:AddColumn(Coluna8)
                     oTab:AddColumn(Coluna9)
                     oTab:AddColumn(Coluna10)



                     oTab:Freeze := 1 // oTab:Colpos - 1

                     Centra(24,'')
                     Sele Forneced
                          Go top

                     Do While .t.

                        OrdSetFocus('fornece2')

                        For i:= 1 to 10
                            oTab:GetColumn(i):ColorBlock :=  { || { Iif(OrdKeyNo()%2==0,4,3),2 } } // Aqui fica zebrado
                        Next

                        Lin_Br := 21
                        Do While ! oTab:Stabilize()
                        Enddo


Browse do GASPro zebrado

Enviado: 08 Mai 2015 08:21
por janio
Mas nesta solução a 'barra luminosa' fica apenas no primeiro campo do browse ne?

Janio

Browse do GASPro zebrado

Enviado: 08 Mai 2015 11:36
por frazato
Ele irá pintar as 10 colunas neste caso, mais você pode colocar pra pintar todas caso queira.

For i:= 1 to Len(oTab:ColCount()) // Pra quantas coluna tiver


Frazato

Browse do GASPro zebrado

Enviado: 08 Mai 2015 12:41
por janio
Frazato,

Mim refiro a 'barra luminosa' de navegação no browse!

Testei seu exemplo e funciona perfeitamente! Ocorre que uso um recurso para deixar essa barra luminosa inteira no browse e não somente no primeiro campo. Mas, usando esse recurso, a medida q vamos navegando no browse a 'zebra' vai sumindo.

Pergunto se ha alguma solução para a barra luminosa de navegação ficar inteira no browse (todos os campos visiveis) e ainda o browse continuar zebrado a medida q for navegando nas setinhas

Janio

Browse do GASPro zebrado

Enviado: 08 Mai 2015 19:27
por janio
Assim funcionou como eu queria!

Código: Selecionar todos

   for n := 1 to Len( aCampos )
      oCol := TBColumnNew( aCabecalho[n], &( "{||" + aCAMPOS[n] + "}" ) ) 
      oCol:Picture := aPict[n]
      oBrw:AddColumn(oCol)
		oBrw:GetColumn(n):ColorBlock :=  { || { Iif(OrdKeyNo()%2==0,4,3),2 } } // Aqui fica zebrado
   next 

   oBrw:ForceStable()

   While ( .t. )

       // para deixar selecionada toda a linha 
      oBrw:colorrect({oBrw:rowpos,1,oBrw:rowpos,oBrw:colCount},{Iif(OrdKeyNo()%2==0,1,3), 1}) // q nao esta com o cursor
      do While ( !oBrw:stabilize() ) ; Enddo
      oBrw:colorrect({oBrw:rowpos,1,oBrw:rowpos,oBrw:colCount},{2,2}) // esta com o cursor

      nTecla := Inkey( 0 )
             
      do Case


Browse do GASPro zebrado

Enviado: 08 Mai 2015 19:38
por JoséQuintas
Quando passei pra Harbour, isso de deixar a linha inteira de outra cor nunca mais funcionou.
Vou até testar agora pra ver se voltou a funcionar.

Browse do GASPro zebrado

Enviado: 08 Mai 2015 21:11
por JoséQuintas
Deu certo.
Retirei a aceleração da minha rotina (parte comentada).

Código: Selecionar todos

      //nkey := 0
      //DO WHILE nkey == 0 .AND. .NOT. oBrowse:Stable
      //   oBrowse:Stabilize()
      //   nkey := Inkey()
      //ENDDO
      //IF oBrowse:Stable
         oBrowse:RefreshCurrent()
         DO WHILE .NOT. oBrowse:Stabilize()
         ENDDO
         oBrowse:ColorRect( { oBrowse:RowPos, 1, oBrowse:RowPos, oBrowse:ColCount }, { 2, 2 } ) // esta com o cursor
         nkey := Inkey(600)
         IF nKey == 0
            KEYBOARD Chr( K_ESC )
            LOOP
         ENDIF
      //ENDIF
No meu caso foi só pra linha inteira ficar com a mesma cor.
Uso cor no browse conforme status da informação da linha, e bastou essa alteração.
Então dá pra simplificar o zebrado, pois oBrowse:RefreshCurrent() faz o serviço de tirar o destaque.

Valeu pelo post.

Nota:
A intenção da aceleração seria nem perder tempo atualizando a tela, caso o usuário tecle alguma coisa.
O Inkey(600) é porque se o usuário demorar mais de 10 minutos pra escolher, o sistema dá ESC automático.
Com isso dá pra pressupor que oBrowse:ColorRect() pinta a área, mas sem mexer nos codeblocks de cores.

Browse do GASPro zebrado

Enviado: 08 Mai 2015 21:35
por JoséQuintas
Confirmado no manual do Clipper:
Cells that are colored using colorRect retain their color until they are scrolled off the screen up or down
Retorna à cor original assim que não for mais a linha atual.

Browse do GASPro zebrado

Enviado: 14 Mai 2015 23:23
por clodoaldomonteiro
Muito obrigado meus amigos, vou testes e postarei aqui os resultados.

Browse do GASPro zebrado

Enviado: 15 Mai 2015 09:12
por JoséQuintas
Reli meus posts, e acabei não explicando direito:

A rotina do Frazato deu certo, pro zebrado basta definir cor das colunas pro zebrado:

Código: Selecionar todos

oBrw:GetColumn(n):ColorBlock :=  { || { Iif(OrdKeyNo()%2==0,4,3),2 } } // Aqui fica zebrado

A rotina do Janio também deu certo, de destacar a linha inteira, mas deu pra simplificar

Código: Selecionar todos

oBrowse:RefreshCurrent() 
DO WHILE .NOT. oBrowse:Stabilize() 
ENDDO 
oBrowse:ColorRect( { oBrowse:RowPos, 1, oBrowse:RowPos, oBrowse:ColCount }, { 2, 2 } ) // esta com o cursor 
nkey := Inkey(0) 
O detalhe de não funcionar comigo antes, era que a rotina de aceleração acabava desposicionando e fazendo o refreshcurrent() em registro errado.

Não estranhem eu repassar.
É que eu até já tinha até desistido disso, e agora voltou a funcionar, então pode ter mais alguém na mesma situação.

Novamente valeu pelo post, Frazato e Janio.

Depois vou rever minha rotina de aceleração.

Parece óbvio agora:
- ColorRect() faz destaque (não interessa :ColorBlock, e só precisa se for diferente do padrão)
- RefreshCurrent() Retorna ao default da linha (retira ColorRect e obedece :ColorBlock - destaque ou não)
- coluna:ColorBlock() define as cores pra normal e destaque, podendo ser zebrado
Se alguma coisa não funcionar, é porque um desses está sendo executado na hora/lugar/posicionamento errado.

Browse do GASPro zebrado

Enviado: 26 Mai 2015 09:44
por clodoaldomonteiro
Amigos!
Muito obrigado pela ajuda e optei por deixar a linha em foco toda colorida, mas não estou conseguindo deixar a coluna em foco com cor diferente, pois assim deixaria o usuário perdido.

Browse do GASPro zebrado

Enviado: 26 Mai 2015 14:14
por JoséQuintas
Talvez alterar aqui, testando a coluna atual, ou pra simplificar, pintar novamente somente a coluna atual de outra cor:

Código: Selecionar todos

oBrowse:ColorRect( { oBrowse:RowPos, 1, oBrowse:RowPos, oBrowse:ColCount }, { 2, 2 } ) // linha inteira com cursor
oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:ColPos, oBrowse:RowPos, oBrowse:ColPos}, { 3, 3 } ) // linha/coluna com o cursor

Browse do GASPro zebrado

Enviado: 26 Mai 2015 22:11
por clodoaldomonteiro
Perfeito José, o trabalho foi só definir as novas cores.

Muito obrigado meu amigo.

Browse do GASPro zebrado

Enviado: 27 Mai 2015 11:00
por JoséQuintas
Este tópico me transformou num expert... rs

Estamos sempre aprendendo e ensinando.
Só acertei minha rotina em Harbour neste mês, durante este tópico.