cor da linha do tbrowse

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

Moderador: Moderadores

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

cor da linha do tbrowse

Mensagem 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?
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

cor da linha do tbrowse

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor da linha do tbrowse

Mensagem 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
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

cor da linha do tbrowse

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor da linha do tbrowse

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

cor da linha do tbrowse

Mensagem 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. )
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/
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

cor da linha do tbrowse

Mensagem 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



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

cor da linha do tbrowse

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

cor da linha do tbrowse

Mensagem 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()
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

cor da linha do tbrowse

Mensagem 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.
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

cor da linha do tbrowse

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor da linha do tbrowse

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