Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post Reply
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by FranciscoA »

Hola amigos del foro.
Conforme a lo prometido, aquí les dejo un ejemplo funcional que muestra como cambiar el color a Header y Footer de una sola columna en xBrowse.
Espero lo disfruten.

El color cambia cuando se hace lo siguiene:
1 - Cambiar de columna con teclas direccionales
2 - Click en header
3 - Click en footer
4 - Click en los datos

El cursor de los datos se posiciona automaticamente en la columna correspondiente.
La dbf usada, CLIENTES, se encuentra en samples.

English:
Hello forum friends .
As promised , here are a functional example that shows how to change the color to Header and Footer single column in xBrowse .
I hope you enjoy .

The color changes when you do the following :
1 - Change column with arrow keys
2 - Click on header
3 - Click on footer
4 - Click on data

The data cursor is automatically positioned in the appropriate column .
The dbf used , CLIENTES, found in samples.

Code: Select all

#include "fivewin.ch"
#include "xbrowse.ch"

REQUEST DBFCDX

//----------------------------------------------------------------------------//
function Main()
   local oDlg, oBrw, oFont, cAlias
   local oOldCol 

   USE CLIENTES VIA "DBFCDX"
   cAlias := Alias()
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 1100,600 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE cAlias ;
      AUTOCOLS ;
      AUTOSORT CELL LINES FOOTERS NOBORDER 

   WITH OBJECT oBrw
      :lColChangeNotify := .t.
      :CreateFromCode()
   END

   oOldCol := oBrw:aCols[oBrw:nColSel]
   oOldCol:bClrGrad := bGradColor() 

   AEval(oBrw:aCols,{|o| o:bLClickFooter := o:bLClickHeader := {|nRow,nCol,nFlags,oCol| ChgClrHeadFoot(oCol,@oOldCol,oBrw,nCol) } })

   oBrw:bChange:={|oCol| oCol:=oBrw:SelectedCol(),ChgClrHeadFoot(oCol,@oOldCol,oBrw,nil) }

   ACTIVATE DIALOG oDlg CENTERED 

   oFont:End()
   CLOSE
return nil

//---------------------------------// Change Header/footer color for one xBrowse's column only
Function ChgClrHeadFoot(oCol,oOldCol,oBrw, nCol)

  if( !oCol == oOldCol ,;
    ( oOldCol:bClrGrad := oBrw:bClrGrad ,;
      oCol:bClrGrad := bGradColor(),;  
      oOldCol := oCol,;
      if( nCol != nil, oBrw:SelectCol(oBrw:MouseColPos(nCol)), nil ),;
      oBrw:Refresh() ;
    ), )

Return nil

//----------------------------------
Function bGradColor()
local bClrGrad := { | lInvert | If( lInvert, ;
      { { 1/3, nRGB( 252, 232, 171 ), nRGB( 248, 195,  34 ) }, ;
        { 2/3, nRGB( 248, 195,  34 ), nRGB( 252, 232, 171 ) }  ;
      }, ;
      { { 1/3, nRGB( 248, 195,  34 ), nRGB( 252, 232, 171 ) }, ;
        { 2/3, nRGB( 252, 232, 171 ), nRGB( 248, 195,  34 ) }  ;
      } ) }
Return bClrGrad
 
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by acuellar »

Gracias Francisco.

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by joseluisysturiz »

Francisco, muchas gracias por tu aporte, probado y hasta los momento se ve muy bien en el xbrowse, cualquier cosa extraña te comento, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by ACC69 »

FranciscoA wrote:Hola amigos del foro.
Conforme a lo prometido, aquí les dejo un ejemplo funcional que muestra como cambiar el color a Header y Footer de una sola columna en xBrowse.
Espero lo disfruten.

El color cambia cuando se hace lo siguiene:
1 - Cambiar de columna con teclas direccionales
2 - Click en header
3 - Click en footer
4 - Click en los datos

El cursor de los datos se posiciona automaticamente en la columna correspondiente.
La dbf usada, CLIENTES, se encuentra en samples.

English:
Hello forum friends .
As promised , here are a functional example that shows how to change the color to Header and Footer single column in xBrowse .
I hope you enjoy .

The color changes when you do the following :
1 - Change column with arrow keys
2 - Click on header
3 - Click on footer
4 - Click on data

The data cursor is automatically positioned in the appropriate column .
The dbf used , CLIENTES, found in samples.

Code: Select all

#include "fivewin.ch"
#include "xbrowse.ch"

REQUEST DBFCDX

//----------------------------------------------------------------------------//
function Main()
   local oDlg, oBrw, oFont, cAlias
   local oOldCol 

   USE CLIENTES VIA "DBFCDX"
   cAlias := Alias()
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 1100,600 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE cAlias ;
      AUTOCOLS ;
      AUTOSORT CELL LINES FOOTERS NOBORDER 

   WITH OBJECT oBrw
      :lColChangeNotify := .t.
      :CreateFromCode()
   END

   oOldCol := oBrw:aCols[oBrw:nColSel]
   oOldCol:bClrGrad := bGradColor() 

   AEval(oBrw:aCols,{|o| o:bLClickFooter := o:bLClickHeader := {|nRow,nCol,nFlags,oCol| ChgClrHeadFoot(oCol,@oOldCol,oBrw,nCol) } })

   oBrw:bChange:={|oCol| oCol:=oBrw:SelectedCol(),ChgClrHeadFoot(oCol,@oOldCol,oBrw,nil) }

   ACTIVATE DIALOG oDlg CENTERED 

   oFont:End()
   CLOSE
return nil

//---------------------------------// Change Header/footer color for one xBrowse's column only
Function ChgClrHeadFoot(oCol,oOldCol,oBrw, nCol)

  if( !oCol == oOldCol ,;
    ( oOldCol:bClrGrad := oBrw:bClrGrad ,;
      oCol:bClrGrad := bGradColor(),;  
      oOldCol := oCol,;
      if( nCol != nil, oBrw:SelectCol(oBrw:MouseColPos(nCol)), nil ),;
      oBrw:Refresh() ;
    ), )

Return nil

//----------------------------------
Function bGradColor()
local bClrGrad := { | lInvert | If( lInvert, ;
      { { 1/3, nRGB( 252, 232, 171 ), nRGB( 248, 195,  34 ) }, ;
        { 2/3, nRGB( 248, 195,  34 ), nRGB( 252, 232, 171 ) }  ;
      }, ;
      { { 1/3, nRGB( 248, 195,  34 ), nRGB( 252, 232, 171 ) }, ;
        { 2/3, nRGB( 252, 232, 171 ), nRGB( 248, 195,  34 ) }  ;
      } ) }
Return bClrGrad
 
Saludos.

Hola buenos dias a todos.

Gracias Ing. Francisco por el aporte y muy buena .

Podrias postear ejemplos de como pintar color en una columna de registros dada una condicion if(cuenta=2106)...., que me pinte de color la columna del registro o de otra manera que me pinte de otro color misma columna en caso que no se cumpla la condicion o volver a su color natural.

Y como podria pintar dos colores distintos en dos diferentes columnas,hablando a nivel de registros no de header ni footer,ya que yo soy muy burro :evil: :oops: :cry: para el pintado de colores en xbrowse .

Saludos cordiales.

Atte: Adrian C. C.

acc69@hotmail.com
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by FranciscoA »

Hola Adrian, probá así:

Code: Select all

  //color columna condicionada
   oBrw2:aCols[6]:bClrStd := { || IF( lTuCondicion, {CLR_YELLOW, CLR_BLACK}, {CLR_WHITE, CLR_RED} ) }
 
   //cualquier color en cualquier columna
   oBrw2:aCols[3]:bClrStd := { || {CLR_BLACK, CLR_YELLOW} } 
   oBrw2:aCols[4]:bClrStd := { || {CLR_BLACK, CLR_CYAN} }  
 
Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
AIDA
Posts: 782
Joined: Fri Jan 12, 2007 8:35 pm

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by AIDA »

Hola esta super se ve mas bonito el xbrowse :mrgreen:

ya lo aplique y en red local funciona muy bien :D

pero ya en red remota se tarda al darle click a la columna que selecciono :shock:

Saluditos :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by nageswaragunupudi »

Two suggestions:

1) Instead of changing bClrGrad whenever column is changed, just initialize each column's bClrGrad in the beginning only once.

2) Calling oBrw:Refresh() each time a column is change slows the performance, particularly on networks, because oBrw:Refresh() re-reads all records from the database. Reading all records from database each time a column is changed makes the browse slow.

It is better to paint headers and footers only without repainting the data. XBrowse provides a method RefreshFooters() to paint only footers, but does not provide a method to refresh headers only. I suggest a function for this.

Please try this alternative solution:

Code: Select all

#include "fivewin.ch"

function Main()

   local oDlg, oBrw, oFont, cAlias
   local oOldCol

   USE CLIENTES VIA "DBFCDX"
   cAlias := Alias()
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 1100,600 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE cAlias ;
      AUTOCOLS ;
      AUTOSORT CELL LINES FOOTERS NOBORDER

   AEval( oBrw:aCols, { |o| o:bClrGrad := bColClrGrad( o ) } )
   WITH OBJECT oBrw
      :lColChangeNotify := .t.
      :bChange    := { || If( oBrw:SelectedCol() == oOldCol, nil, ;
         ( BrwRefreshHeaders( oBrw ), oBrw:RefreshFooters(), oOldCol := oBrw:SelectedCol() ) ) }
      :CreateFromCode()
   END

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()
   CLOSE
return nil

//---------------------------------

function BrwRefreshHeaders( oBrw )

   local nRow     := 0
   local nCol     := If( oBrw:lRecordSelector, oBrw:nRecSelWidth, 0 )
   local aCols    := Array( Len( oBrw:aDisplay ) + 1 )
   local nLast    := oBrw:LastDisplayPos()
   local nFor, oCol

   for nFor := 1 to nLast
      aCols[ nFor ] := nCol
      oCol := oBrw:ColAtPos( nFor )
      nCol += oCol:nWidth + 2
   next
   aCols[ nFor ] := nCol
   oBrw:PaintHeader( oBrw:GetDC(), aCols, nLast, oBrw:hWhitePen, oBrw:hBtnShadowPen, oBrw:hColPen )
   oBrw:ReleaseDC()

return nil

//----------------------------------------------------------------------------//

static function bColClrGrad( oCol )
return { | lInvert | ;
         If( lInvert, Eval( oCol:oBrw:bClrGrad, .t. ), ;
         If( oCol == oCol:oBrw:SelectedCol(), ;
             { { 1/3, nRGB( 248, 195,  34 ), nRGB( 252, 232, 171 ) }, ;
               { 2/3, nRGB( 252, 232, 171 ), nRGB( 248, 195,  34 ) }  ;
             }, Eval( oCol:oBrw:bClrGrad, .f. ) ) ) }

//----------------------------------------------------------------------------//
 
Note: PaintHeader() method is not intended to be used in application programs directly. This may change in future versions. But if we change this method, we surely provide Method RefreshHeaders(). Then you can safely replace call to "BrwRefreshHeaders( oBrw )" with "oBrw:RefreshHeaders()"
Regards

G. N. Rao.
Hyderabad, India
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by FranciscoA »

Mr Nages.

Gracias por sus sugerencias, su atención, y su codigo.

Precisamente estaba tratando de crear la function RefreshHeaders() y/o usar PaintHeader(), pero aún no lo había logrado de ese modo, así que decidí exponer el código por si alguien decidía mejorarlo.

Nuevamente, gracias!!

*******************
Thanks for your suggestions , your attention, and your code .

I was just trying to create the RefreshHeaders function () and / or use PaintHeader (), but still had not managed that way , so I decided to expose the code in case someone decided to improve it.

Again , thank you !!
********************
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by FranciscoA »

Agradezco los comentarios de los que decidieron probarlo.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by nageswaragunupudi »

Included new method RefreshHeaders() in FWH 15.04.
With this bChange can be written as:

Code: Select all

      :bChange    := { || If( oBrw:SelectedCol() == oOldCol, nil, ;
         ( oBrw:RefreshHeaders(), oBrw:RefreshFooters(), oOldCol := oBrw:SelectedCol() ) ) }
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by FranciscoA »

Mr. Nages.
Great !!
A more satisfaction from FiveWin for all users, especially those who maintain updated its version .
Regards.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by joseluisysturiz »

FranciscoA wrote:Agradezco los comentarios de los que decidieron probarlo.
Al Cesar lo que es del Cesar..y al PROGRAMADOR lo que es del PROGRAMADOR...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by ACC69 »

FranciscoA wrote:Hola Adrian, probá así:

Code: Select all

  //color columna condicionada
   oBrw2:aCols[6]:bClrStd := { || IF( lTuCondicion, {CLR_YELLOW, CLR_BLACK}, {CLR_WHITE, CLR_RED} ) }
 
   //cualquier color en cualquier columna
   oBrw2:aCols[3]:bClrStd := { || {CLR_BLACK, CLR_YELLOW} } 
   oBrw2:aCols[4]:bClrStd := { || {CLR_BLACK, CLR_CYAN} }  
 
Saludos

Gracias Ing. Francisco, excelente, no era gran cosa ni dificil,pero si soy muy burro para colorear en xBrowse que lo mismo me sucede con los dialogosy fonts,que mejor lo dejo por default...

Saludos y buen dia.

Atte: Adrian C. C.
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Pequeño aporte: Cambiar Color a Header/Footer 1 Col.

Post by MarioG »

Hola!
Retomando este tema.
Se puede dar color al Footer de distintas columnas?
O sea sin ninguna condición; desde el arranque que muestre el color definido

Gracias!
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Post Reply