ColorRect()

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

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

ColorRect()

Mensagem por Hasse »

Bom dia.

A sintaxe do ColorRect() do TBrowse() no Harbour mudou em relação ao xHarbour ?

Uso da forma abaixo e não funciona:

Código: Selecionar todos

      OTB:colorRect({OTB:RowPos,1,OTB:RowPos,OTB:ColCount},{2,3})
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

ColorRect()

Mensagem por Kapiaba »

Talvez:

Código: Selecionar todos

   oTb:AutoLite := .F.

   oTb:RefreshAll()

   oTb:ColorRect( { oTb:RowPos, oTb:LeftVisible, oTb:RowPos, oTb:RightVisible }, { 2, 3 } )

   nKey := Inkey(0)

Ou:

Código: Selecionar todos

/*
 * Harbour Project source code: 
 *    Demonstration/test code for TBrowse class 
 * 
 * Copyright 2009 Przemyslaw Czerpak <druzus / at / priv.onet.pl> 
 * www – http://harbour-project.org 
 * 
 */ 

#include "inkey.ch" 
#include "button.ch" 
#include "setcurs.ch" 
#include "box.ch"
proc main()

   static s_nCount := 0 
   static s_nPos   := 1 
   static s_nSize  := 100

   local nTop, nLeft, nBottom, nRight 
   local cColor 
   local oBrw, oCol1, oCol2, oCol3, oCol4 
   local nKey, nCol

   nTop    := 2 
   nLeft   := 10 
   nBottom := 20 
   nRight  := 70 
   cColor  := "W+/R,G+/BR,RG+/B,BG+/G,N/GR,GR+/BG,B/GR*"

   set date format to "yyyy/mm/dd"

   // enable mouse events in CL53/Harbour 
   #ifdef _SET_EVENTMASK 
      set( _SET_EVENTMASK, INKEY_ALL ) 
      mSetCursor( .t. ) 
   #endif

   cls 
   dispBox( nTop, nLeft, nBottom, nRight, B_DOUBLE_SINGLE, cColor ) 
   oBrw := tbrowseNew( nTop + 1, nLeft + 1, nBottom - 1, nRight - 1 ) 
   dispOutAt( nTop + 3,    nLeft,  "Ã", cColor ) 
   dispOutAt( nTop + 3,    nRight, "´", cColor ) 
   dispOutAt( nBottom - 2, nLeft,  "Ã", cColor ) 
   dispOutAt( nBottom - 2, nRight, "´", cColor )

   oBrw:colorSpec( cColor ) 
   oBrw:headSep := "¿ ÚÄ" 
   oBrw:footSep := "Ù ÀÄ" 
   oBrw:colSep  := "³ ³"

   oBrw:SkipBlock     := { | n | hb_idleSleep( 0.2 ), ; 
                           n := iif( n < 0, max( n, 1 - s_nPos ), ; 
                                            min( s_nSize - s_nPos, n ) ), ; 
                           s_nPos += n, n } 
   oBrw:GoTopBlock    := { || s_nPos := 1 } 
   oBrw:GoBottomBlock := { || s_nPos := s_nSize }

   oCol1 := tbColumnNew( "COL;1;", {|| s_nPos } ) 
   oCol1:defColor := { 2, 1, 3, 4 } 
   oCol1:footing := "position" 
   oCol1:colorBlock := {|val| { val % 5 + 1, val % 3 + 2 } }

   oCol2 := tbColumnNew( "COL;2",  {|| s_nCount++ } ) 
   oCol2:defColor := { 3, 4, 5, 6 } 
   oCol2:footing := "counter" 
   oCol2:headSep := "¿ ÚÄ´HIDEÃÄ"

   oCol3 := tbColumnNew( "COL 3",  {|| s_nPos % 3 == 0 } ) 
   oCol3:defColor := { 5, 6, 2, 3 } 
   oCol3:footing := "logical" 
   oCol3:picture := "@YR [Y]"  // Clipper wrongly calculate the size here 
   oCol3:headSep := "· ÖÄ´HIDEÃÄ" 
   oCol3:footSep := "½ ÓÄ" 
   oCol3:colSep  := "º º"

   oCol4 := tbColumnNew( "   SHOW;   ALL",  {|| date() - s_nPos} ) 
   oCol4:defColor := { 6, 3, 4, 2 } 
   oCol4:footing := "date"

   oBrw:addColumn( oCol1 ) 
   oBrw:addColumn( oCol2 ) 
   oBrw:addColumn( oCol3 ) 
   oBrw:addColumn( oCol4 )

   // start at bottom 
   oBrw:goBottom()

   while .T. 
      while !oBrw:stabilize() .and. nextkey()==0 
      enddo 
      nKey := inkey( 0 ) 
      if nKey == K_ESC 
         exit 
      elseif nKey == K_INS 
         oBrw:colorRect( { oBrw:rowPos, 1, oBrw:rowPos, 4 }, { 7, 6 } ) 
      elseif nKey == K_DEL 
         oBrw:refreshCurrent() 
      elseif nKey >= ASC( "0" ) .AND. nKey <= ASC( "3" ) 
         oBrw:freeze := nKey - ASC( "0" ) 
      elseif nKey == K_LBUTTONDOWN .and. ; 
             oBrw:hitTest(mRow(),mCol()) == HTHEADSEP .and. ; 
             ( ( nCol := oBrw:mColPos ) == 2 .or. nCol == 3 ) 
         if nCol == 2 
            oCol2:width := 0 
         else 
            oCol3:width := 0 
         endif 
         oBrw:configure() 
      elseif nKey == K_LBUTTONDOWN .and. ; 
             oBrw:hitTest(mRow(),mCol()) == HTHEADING .and. ; 
             oBrw:mColPos == 4 
         oCol2:width := 10 
         oCol3:width := 7 
         oBrw:configure() 
      else 
         oBrw:applyKey( nKey ) 
      endif 
   enddo

return

#ifndef __HARBOUR__ 
proc hb_idleSleep( n ) 
   n += seconds() 
   while seconds() < n 
   enddo 
return 
#endif
abs.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

ColorRect()

Mensagem por Kapiaba »

Se eu entendi a classe tBrowse do xHarbour, pode ser assim:

Código: Selecionar todos

    aRect := { 1, 1, browse:rowCount, browse:colCount }

    browse:colorRect( aRect, {2, 3} )

abs

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

ColorRect()

Mensagem por Hasse »

Perdão. Ás vezes eu consigo ser lacônico demais. Até para o meu próprio gosto....

Vejam as 2 imagens do anexo.

No xHarbour a linha está marcada e também vê-se onde está o cursor (vermelho).

No Harbour vê-se a linha mas não se sabe onde está o cursor.

Desta forma, observa-se que na linha:

Código: Selecionar todos

OTB:colorRect({OTB:RowPos,1,OTB:RowPos,OTB:ColCount},{2,3})
Em: {2,3}: o valor 3 é o vermelho do cursor e o 2 é a cor da linha horizontal.

No Harbour parece que o segundo valor (" 3 ") não surte efeito.

Hoje à noite pretendo testar a sugestão do colega Kapiaba, já que essa proposta tem características diferentes no tratamento das cores:

Código: Selecionar todos

 oCol1:defColor := { 2, 1, 3, 4 } 
, uma combinação de cores para cada coluna. Essa sintaxe eu não conhecia.
Anexos
Harbour.jpg
xHarbour.jpg
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

ColorRect()

Mensagem por lwinter »

Me desculpe a ignorancia mas nao consegui entender o que a ColorRect de fator faz. Alguem poderia me explicar? Posso retira-la? Pois esta me atrapalhando na definicao dinamica de cores, onde o mesma campo na mesma coluna pode variar a cor dependendo do status XX.

Obrigado!
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

ColorRect()

Mensagem por Hasse »

Bom dia Iwinter
A Função ColorRect() serve para definir as cores da linha onde está o cursor.
Retirando o ColorRect() você terá somente a visualização da cor diferenciada somente na janela onde está o cursor, e não a linha toda.
Depende do teu aplicativo necessitar ou não desta facilidade.
Para mim, no meu aplicativo, esta função é imprescindível.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

ColorRect()

Mensagem por lwinter »

Entendi muito obrigado. É que estou usando a defcolor e colorclock da coluna, assim cada coluna ou celula pode ter uma cor especifica.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ColorRect()

Mensagem por JoséQuintas »

Hasse escreveu:A Função ColorRect() serve para definir as cores da linha onde está o cursor.
Correção.
Como o próprio nome sugere, ColorRect() atribui cores a uma área (retângulo) do tbrowse.

Seria para o caso onde quer cores diferentes das padrão, e diferente das opções já existentes.

Como exemplo, o padrão do tbrowse é destacar somente o campo aonde está posicionado, e ColorRect() pode ser usado pra mudar a cor da linha inteira como sendo 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/
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

ColorRect()

Mensagem por lwinter »

Agora ficou claro Jose! Mas a defcolor e colorblock ja me atende.
Responder