Página 1 de 1
cor da linha do tbrowse
Enviado: 02 Out 2013 23:22
por JoséQuintas
Tem como alterar a cor da linha inteira do tbrowse?
Pra alterar uma coluna é só acrescentar no tbcolumn, ok.
Mas e pra todas as colunas ficarem com a mesma cor?
Motivo:
Antes eu usava uma linha construída com campo + "|" + campo + "|" e isso virava uma coluna.
Como alterando a codepage não dá mais pra usar a barra, precisava de uma alternativa pra destacar a linha completa.
Isso é possível?
cor da linha do tbrowse
Enviado: 03 Out 2013 09:04
por Toledo
Olá José, tenta fazer o seguinte:
No seu código você deve ter a variável ColorSpec:
Código: Selecionar todos
oMybrowser:ColorSpec := "W+/B,G+/B,GR+/B,R+/B,GB+/B,RB+/B,W+/G,R*/B"
Observe que no meu exemplo tem 8 combinações de cores que estão separadas por vírgula.
Provavelmente no seu código deve ter também o oMybrowser:stabilize(), então neste ponto incluir:
Código: Selecionar todos
oMybrowser:colorRect({oMybrowser:RowPos,1,oMybrowser:RowPos,oMybrowser:ColCount},{ 7 , 8 })
DO WHILE (!oMybrowser:stabilize())
ENDDO
oMybrowser:refreshAll()
oMybrowser:colorRect({oMybrowser:RowPos,1,oMybrowser:RowPos,oMybrowser:ColCount},{ 7 , 8 })
O bloco { 7 , 8 } corresponde as cores do ColorSpec (7=W+/G e 8=R*/B"), então você pode fazer sua própria combinações de cores.
Abraços,
cor da linha do tbrowse
Enviado: 03 Out 2013 15:48
por JoséQuintas
Valeu. Fiz baseado no seu post.
Mas usei o bloco de cores no padrão do tbrowse , assim continuo com opções conforme determinada situação (acabei precisando de InverseColor() por causa disso)
E como encontrei sobre :LeftVisible e :RightVisible, troquei cor somente da parte visível (mais rápido, apesar de não dar pra perceber diferença na prática).
Só que lembrei do meu comparativo mensal do controle bancário.
Tem as linhas de despesas, e as colunas de meses, e ao teclar ENTER apresenta o detalhe de lançamentos que compõem o total da despesa dentro do mês. Por enquanto só lembrei deste que vai precisar do estilo padrão.
Código: Selecionar todos
bColorBlock := { || { 1, 2 } }
oTBrowse:AutoLite := .f.
...
oBrowse:RefreshAll()
oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:LeftVisible, oBrowse:RowPos, oBrowse:RightVisible }, InverseColor( Eval( bColorBlock ) ) )
Inkey(0)
STATIC FUNCTION InverseColor( aValues )
LOCAL aNewValues
aNewValues := Array(2)
aNewValues[ 1 ] := aValues[ 2 ]
aNewValues[ 2 ] := aValues[ 1 ]
RETURN aNewValues
cor da linha do tbrowse
Enviado: 03 Out 2013 15:58
por Toledo
José, não entendi a razão da função InverseColor()! Se usar { 2 , 1 } não teria o mesmo resultado?
Código: Selecionar todos
oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:LeftVisible, oBrowse:RowPos, oBrowse:RightVisible }, { 2, 1 } )
Abraços,
cor da linha do tbrowse
Enviado: 03 Out 2013 17:20
por JoséQuintas
Acabou ajudando de novo!
Valeu de novo!
Tenho cores diferentes conforme status do cliente, status do pedido, etc.
Pensei na quantidade de opções, mas esqueci que o highlite de todas é a mesma cor: a segunda.
Com isso, nem precisa mais do codeblock com cores e nem do inverse.
Então agora a diferença entre padrão ou não pode ser uma única variável, e os IFs nas partes alteradas.
Foi nisso que ajudou agora,, por chamar a atenção da parte inútil.
Talvez isso pudesse ser acrescentado na classe original do Harbour: um colorblock na classe tBrowse() pra quando se quiser cor por linha.
Não tem no Clipper, mas continuaria compatível com ele, já que seria algo a mais.
cor da linha do tbrowse
Enviado: 03 Out 2013 17:29
por JoséQuintas
Por enquanto, não vejo qual a utilidade de um tbrowse sem destacar cores, então, aproveitei a variável já existente.
Agora só setar oBrowse:AutoLite quando quiser a padrão ou a por linha.
Código: Selecionar todos
oBrowse:RefreshAll()
IF .NOT. oBrowse:AutoLite
oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:LeftVisible, oBrowse:RowPos, oBrowse:RightVisible }, { 2, 1 } )
ENDIF
nkey := MyInkey( Sistema:nIdleSeconds, .f. )
cor da linha do tbrowse
Enviado: 04 Out 2013 09:08
por frazato
Bom dia, eu uso em quase todo o meu sistema, desta maneira.
Código: Selecionar todos
While ! lEnd
nCampos:=oBrowse:ColCount()
If xViaWts==.f.
If wPintar
For i:= 1 to nCampos
oBrowse:GETColumn(I):ColorBlock := ;
{ || { PintaTela(),6 } }
Next
Else
For i:= 1 to nCampos
oBrowse:GETColumn(I):ColorBlock := ;
{ || { 1,6 } }
Next
Endif
//---- Testando
If Len(wRegPinterNivel) > 0 .and. lMostraDestaqItem # 3
For i:= 1 to nCampos
oBrowse:GETColumn(I):ColorBlock := ;
{ || { PintaNivel(Produto->codigo),6 } }
Next
Endif
Endif
Do While ! oBrowse:Stabilize()
Enddo
Código: Selecionar todos
For i:= 1 to nTotalColunas
oTab:GetColumn(I):ColorBlock := ;
{ || { Iif(Recno()==1,2,;
Iif(Recno()==nRegTotalDia,3,;
Iif(Recno()==nRegTotal,4,1) ) ),5} }
Next
oTab:Refreshall()
Do While ! oTab:Stabilize()
Enddo
cor da linha do tbrowse
Enviado: 05 Out 2013 09:56
por JoséQuintas
Não entendi porque, mas aquela alteração usando colorrect causou problemas.
Qualquer que seja a seleção, acaba sempre retornando o primeiro registro.
cor da linha do tbrowse
Enviado: 05 Out 2013 12:43
por JoséQuintas
Algo relacionado ao RefreshAll, assim como no Clipper. Achei isto, mas ainda não testei:
http://www.davep.org/clipper/FAQ/clipper-12.html
12.6 How do I keep TBrowse from messing up the record pointer?
(Answer supplied by Ian Day, 14 February 1995.)
When repositioning a TBrowse, you may have found the right record but the :refreshall() and :stabilize() calls move the record pointer elsewhere.
This is a common problem. When you signal a RefreshAll() the tbrowse internal skips back to the first visible record, you can stop this happening by forcing the tbrowse row indicator to the top of the browse, but you must do this before you issue a RefreshAll().
So, something that may work for you would be:
dbSeek(cSomething)
oBrowse:RowPos := 1 // So it doesn't need to skip back
oBrowse:RefreshAll()
oBrowse:ForceStable()
cor da linha do tbrowse
Enviado: 05 Out 2013 16:27
por JoséQuintas
Por enquanto voltei à estaca zero.
Nenhuma opção funcionou.
Se corrigir a posição no DBF, perde-se a cor.
Se corrigir a cor, perde-se a posição no DBF.
cor da linha do tbrowse
Enviado: 05 Out 2013 17:00
por Toledo
Olá José, tenta o seguinte:
- Retire a linha oBrowse:RefreshAll()
- Uma linha antes do DO WHILE !oBrowse:stabilize() coloque oBrowse:refreshCurrent(), veja exemplo:
Código: Selecionar todos
oBrowse:refreshCurrent()
DO WHILE !oBrowse:stabilize()
ENDD
Abraços,
cor da linha do tbrowse
Enviado: 07 Jan 2014 02:28
por JoséQuintas
Tinha esquecido disto. Não consegui fazer funcionar.
Qualquer dia tento de novo, ou talvez tente pegar os fontes do tbrowse do Clipper pra trocar no Harbour.