FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Sugerencia de cambio a clase: TRibbonBar
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM

Sugerencia de cambio a clase: TRibbonBar

Posted: Sat Jun 11, 2016 01:19 PM
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:


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.


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


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 (fw): Select all Collapse
DATA nRoundBox

En el metodo NEW, inicializar esta variable nRoundBox:
Code (fw): Select all Collapse
   
...
::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 (fw): Select all Collapse
...
   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 (fw): Select all Collapse
...
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 (fw): Select all Collapse
...
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 (fw): Select all Collapse
 DEFINE RIBBONBAR oRibbon PROMPTS " Tab01 "," Tab02 "," Tab03 "," Tab04 "," Tab05 " OF oWnd ;
          HEIGHT 100 TOPMARGIN 25 2010
          
   oRibbon:nRoundBox := 0


Saludos cordiales.

Carlos.
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM

Re: Sugerencia de cambio a clase: TRibbonBar

Posted: Sat Jun 11, 2016 01:45 PM

Se me olvido comentar, que estoy utilizando la version de FWH 1604.

Saludos.

Carlos.

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Sugerencia de cambio a clase: TRibbonBar

Posted: Mon Jun 13, 2016 11:09 AM

Me parece buena implementación, como tú dices "para gustos, los colores"

También se puede cambiar la DATA ::aGradFld

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

Re: Sugerencia de cambio a clase: TRibbonBar

Posted: Tue Oct 25, 2016 03:20 PM
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.



Saludos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Sugerencia de cambio a clase: TRibbonBar

Posted: Tue Oct 25, 2016 04:32 PM

José Luis,

Prueba asi:

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

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion