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

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

Postby FranciscoA » Mon Apr 06, 2015 3:10 pm

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  Expand view
#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.

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

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

Postby acuellar » Mon Apr 06, 2015 4:33 pm

Gracias Francisco.

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

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

Postby joseluisysturiz » Mon Apr 06, 2015 7:52 pm

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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

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

Postby ACC69 » Thu Apr 09, 2015 3:38 pm

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  Expand view
#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
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby FranciscoA » Fri Apr 10, 2015 3:05 am

Hola Adrian, probá así:
Code: Select all  Expand view
 //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.

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

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

Postby AIDA » Fri Apr 10, 2015 7:07 am

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
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm

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

Postby nageswaragunupudi » Fri Apr 10, 2015 2:17 pm

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  Expand view
#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
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

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

Postby FranciscoA » Fri Apr 10, 2015 3:33 pm

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.

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

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

Postby FranciscoA » Fri Apr 10, 2015 3:40 pm

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

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

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

Postby nageswaragunupudi » Fri Apr 10, 2015 4:41 pm

Included new method RefreshHeaders() in FWH 15.04.
With this bChange can be written as:
Code: Select all  Expand view
     :bChange    := { || If( oBrw:SelectedCol() == oOldCol, nil, ;
         ( oBrw:RefreshHeaders(), oBrw:RefreshFooters(), oOldCol := oBrw:SelectedCol() ) ) }
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

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

Postby FranciscoA » Fri Apr 10, 2015 5:00 pm

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.

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

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

Postby joseluisysturiz » Fri Apr 10, 2015 5:20 pm

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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

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

Postby ACC69 » Fri Apr 10, 2015 10:22 pm

FranciscoA wrote:Hola Adrian, probá así:
Code: Select all  Expand view
 //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.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 73 guests