Page 1 of 1

Sugerencia de cambio a clase: TRibbonBar

PostPosted: Sat Jun 11, 2016 1:19 pm
by csincuir
Hola a todos,
Dicen que "En gustos se rompen generos", y como he estado trabajando en hacer un nuevo menu, con la clase TRibbonBar, me gusta la opcion 2010, por sus separadores de los grupos, pero no me gusta que los pestañas de los tabs, esten redondeadas:
Image

Me gustan las pestañas rectas de la opcion 2013, pero no me gusta que tenga un fondo azul, ni tampoco me gusta el separador de los grupos.
Image

Me gusta mas la combinacion de las dos opciones 2010 y 2013:
Image

Asi, que si a Antonio le parece agregar el pequeño cambio que hice a la clase TRibbonBar, para escoger entre el redondeo en las pestañas de los tabs, les copio los cambios que hice en esta clase para tener esta funcionalidad en la TRibbonBar:

Agregue la variable nRoundBox en la defincion de los DATA de la clase, que contendra el numero de redendeo de las tabs:
Code: Select all  Expand view
DATA nRoundBox

En el metodo NEW, inicializar esta variable nRoundBox:
Code: Select all  Expand view
 
...
::aPrompts = CheckArray( aPrompts )
::nStart   = nStart

::nRoundBox := 5
IF l2013
   ::nRoundBox := 0
END
 

Y por último, cambiar en los metodos Paint(), y PaintFld(), en las funciones RoundBox(), las decisiones para colocar el numero del redondeo de las tabas, por esta nueva variable nRoundBox:
Code: Select all  Expand view

...
   if ::oBackStage == NIL .OR. ! ::oBackStage:lVisible
      RoundBox( hDCMem, 1, nTop-1, aRect[ 4 ]+1, aRect[ 3 ] - 2,;
               If( ::l2013, 0, 7 ), If( ::l2013, 0, 7 ), ::nClrBoxOut )
 

De esta forma:
Code: Select all  Expand view

...
METHOD Paint() CLASS TRibbonBar
...
if ::oBackStage == NIL .OR. ! ::oBackStage:lVisible
      RoundBox( hDCMem, 1, nTop-1, aRect[ 4 ]+1, aRect[ 3 ] - 2,;
                ::nRoundBox, ::nRoundBox, ::nClrBoxOut )
      RoundBox( hDCMem, 2, nTop  , aRect[ 4 ], aRect[ 3 ] - 3, ::nRoundBox,;
                ::nRoundBox, ::nClrBoxIn )
endif
 

Code: Select all  Expand view

...
METHOD PaintFld( nPrompt, hDCMem, nType )  CLASS TRibbonBar
...
do case
      case nType == 1
         FillRect( hDCMem, { nRow - 2, nCol - 3, nRow + ::nHeightFld - 1,  nCol + ::aSizes[ nPrompt ] + 3 }, hBrush2 )
         GradientFill( hDCMem, nRow, nCol + 1, nRow + ::nHeightFld - 1, nCol +  ::aSizes[ nPrompt ], aGradFld )
         RoundBox( hDCMem, nCol - 1, nRow - 1,  nCol+::aSizes[ nPrompt ] + 1, nRow + ::nHeightFld + 3,;
                  ::nRoundBox, ::nRoundBox, ::nClrBoxOut )
         RoundBox( hDCMem, nCol, nRow,  nCol + ::aSizes[ nPrompt ], nRow + ::nHeightFld + 3,;
                 ::nRoundBox, ::nRoundBox, ::nClrBoxIn )

      case nType == 2
         if ! ::l2010 .and. nPrompt != ::nStart
            GradientFill( hDCMem, nRow, nCol - 3, nRow + ::nHeightFld - 2, nCol +  ::aSizes[ nPrompt ] + 3, ::aGradHigh )
         endif
         GradientFill( hDCMem, nRow + 1, nCol, nRow + ::nHeightFld + 1, nCol +  ::aSizes[ nPrompt ], aGradFld )
         RoundBox( hDCMem, nCol - 1, nRow - 1,  nCol+::aSizes[ nPrompt ] + 1,;
                   nRow + ::nHeightFld + 3, ::nRoundBox, ::nRoundBox, ::nClrBoxSelOut )
         RoundBox( hDCMem, nCol, nRow,  nCol + ::aSizes[ nPrompt ], nRow + ::nHeightFld + 3,;
                  ::nRoundBox, ::nRoundBox, ::nClrBoxSelIn )

      case nType == 3
         if ::aEnable[ nPrompt ]
            if ::l2010 .or. nPrompt == ::nStart
               GradientFill( hDCMem, nRow + 1, nCol, nRow + ::nHeightFld + 1,nCol +  ::aSizes[ nPrompt ], aGradFld )
            else
               GradientFill( hDCMem, nRow + 1, nCol, nRow + ::nHeightFld + 1,nCol +  ::aSizes[ nPrompt ], ::aGradOver )
            endif
            if nPrompt != ::nStart
               RoundBox( hDCMem, nCol - 1, nRow - 1,  nCol+::aSizes[ nPrompt ] + 1, nRow + ::nHeightFld + 3, ::nRoundBox, ::nRoundBox, ::nClrBoxOut )
               RoundBox( hDCMem, nCol, nRow,  nCol + ::aSizes[ nPrompt ], nRow + ::nHeightFld + 3, ::nRoundBox, ::nRoundBox, ::nClrBoxIn )
            else
               RoundBox( hDCMem, nCol - 1, nRow ,  nCol+::aSizes[ nPrompt ] + 1, nRow + ::nHeightFld + 3, ::nRoundBox, ::nRoundBox, ::nClrBoxOut )
            endif

         else
            FillRect( hDCMem, { nRow - 2, nCol - 2, nRow + ::nHeightFld - 1,  nCol + ::aSizes[ nPrompt ] + 2 }, hBrush2 )
         endif

      case nType == 4 // unselect
         if nPrompt == ::nStart
            GradientFill( hDCMem, nRow + 1, nCol, nRow + ::nHeightFld + 1,nCol +  ::aSizes[ nPrompt ], aGradFld )
            RoundBox( hDCMem, nCol - 1, nRow ,  nCol+::aSizes[ nPrompt ] + 1, nRow + ::nHeightFld + 3, ::nRoundBox, ::nRoundBox, ::nClrBoxOut )
            FillRect( hDCMem, { nRow + ::nHeightFld - 1, nCol - 1, nRow + ::nHeightFld + 3, nCol + ::aSizes[ nPrompt ] + 1 }, hBrush3 )
...
 

Y para utilizar, esta nueva opcion, se haria de esta forma:
Code: Select all  Expand view

 DEFINE RIBBONBAR oRibbon PROMPTS " Tab01 "," Tab02 "," Tab03 "," Tab04 "," Tab05 " OF oWnd ;
          HEIGHT 100 TOPMARGIN 25 2010
         
   oRibbon:nRoundBox := 0        
 


Saludos cordiales.

Carlos.

Re: Sugerencia de cambio a clase: TRibbonBar

PostPosted: Sat Jun 11, 2016 1:45 pm
by csincuir
Se me olvido comentar, que estoy utilizando la version de FWH 1604.

Saludos.

Carlos.

Re: Sugerencia de cambio a clase: TRibbonBar

PostPosted: Mon Jun 13, 2016 11:09 am
by cnavarro
Me parece buena implementación, como tú dices "para gustos, los colores"

También se puede cambiar la DATA ::aGradFld

Re: Sugerencia de cambio a clase: TRibbonBar

PostPosted: Tue Oct 25, 2016 3:20 pm
by José Luis Sánchez
Hola Carlos,

Me ha gustado mucho el efecto y lo he implementado en mis programas. Me gustaría saber como cambiar el pintado del botón seleccionado de la cinta, para poner un color plano al estilo de PicPick, tal como aparece en la imagen. Los colores que se usa son azul fuerte y claro.

Image

Saludos

Re: Sugerencia de cambio a clase: TRibbonBar

PostPosted: Tue Oct 25, 2016 4:32 pm
by Antonio Linares
José Luis,

Prueba asi:

oRBar:aGradFld = { | nOpt | { { 1, CLR_WHITE, CLR_WHITE } } }