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.