Página 1 de 1

ColorRect()

Enviado: 22 Dez 2014 11:59
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})

ColorRect()

Enviado: 22 Dez 2014 14:50
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.

ColorRect()

Enviado: 22 Dez 2014 15:00
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


ColorRect()

Enviado: 22 Dez 2014 19:51
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.

ColorRect()

Enviado: 29 Abr 2020 18:19
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!

ColorRect()

Enviado: 30 Abr 2020 12:49
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.

ColorRect()

Enviado: 01 Mai 2020 15:02
por lwinter
Entendi muito obrigado. É que estou usando a defcolor e colorclock da coluna, assim cada coluna ou celula pode ter uma cor especifica.

ColorRect()

Enviado: 01 Mai 2020 15:42
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.

ColorRect()

Enviado: 03 Mai 2020 19:54
por lwinter
Agora ficou claro Jose! Mas a defcolor e colorblock ja me atende.