Page 1 of 3

gradiente en fila seleccionada en xbrowse

PostPosted: Thu Dec 03, 2009 2:00 pm
by José Luis Sánchez
Hola,
¿ Es posible poner algo que no sea un color sólido para marcar la fila seleccionada en un xbrowse ? ¿ Se puede hacer un gradiente como el que hace Windows 7 en el explorador de archivos ?

Saludos,

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Fri Dec 04, 2009 5:16 am
by nageswaragunupudi
It is possible to have different kinds of backgrounds in XBrowse cells other than solid colors.

1. use oCol:oBrush. oBrush can be a brush object or a codeblock.
2. Can assign bitmaps to columns and use oCol:lBmpStretch := .t. to stretch the bitmap to fill the cell area.

Example of Gradient cells can be seen at
viewtopic.php?f=3&t=17545

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Fri Dec 04, 2009 7:46 am
by José Luis Sánchez
Thanks for yor kind answerd. It's just what I was looking for.

Regards,

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Fri Dec 04, 2009 9:25 am
by Antonio Linares
José Luis,

Next FWH 9.12 will provide it as a standard xbrowse feature :-)

If the second color in the color pair returned by bClrStd, bClrSel, bClrSelFocus of the browse object of column object is an array of gradient colors, the row or cell will be painted with that gradient colors

El próximo FWH 9.12 lo ofrecerá como una capacidad estandard propia del xbrowse :-)

Si el segundo color en el par de colores devuelto por los datos bClrStd, bClrSel, bClrSelFocus es un array de degradados de colores, la fila o la celda se pintará con esos colores degradados

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Fri Dec 04, 2009 6:30 pm
by José Luis Sánchez
Antonio,
Yo uso una versión de xbrowse modificada que permite ajustar automáticamente el ancho de las columnas, es una versión vieja pero que funciona perfectamente. Modificando un poco la clase puedo conseguir ese aspecto que me interesa, y no se si el xbrowse que viene con FWH hace este ajuste automático.
Saludos,
José Luis

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Fri Dec 04, 2009 8:58 pm
by Antonio Linares
José Luis,

Si nos proporcionas un ejemplo de ajuste automatico para probarlo aqui, podemos comentarte que tal funciona.

O si deseas compartir tus modificaciones con otros usuarios aqui en el foro, te estaremos muy agradecidos todos y asi podremos ir mejorando xbrowse de acuerdo a las necesidades de todos :-)

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Sat Dec 05, 2009 6:36 am
by Antonio Linares
José Luis,

El código fuente de la función XBrowse() de FWH, usada tambien desde el comando XBROWSER, es un muy buen ejemplo de como ajustar las dimensiones del dialogo y del xbrowse contenido.

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Mon Dec 07, 2009 3:43 pm
by José Luis Sánchez
Antonio,
ya que estás puesto lo suyo sería que se pudiera simular el efecto nativo de Windows7 tal como aparece en la imagen. Es hacerle un recuadro a la fila activa y el degradado al pintarla.
Saludos,

Image

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 2:46 am
by Antonio Linares
Jose Luis,

Aqui tienes un ejemplo basado en el de Rao :-)

Image

Code: Select all  Expand view
#include 'fivewin.ch'
#include 'xbrowse.ch'

function Main()

   local oDlg, oBrw, oFont
   local nRecSel

   USE CUSTOMER ALIAS CUST
   nRecSel  := CUST->( RecNo() )

   DEFINE FONT oFont NAME 'Tahoma' SIZE 0, -14

   DEFINE DIALOG oDlg SIZE 640,440 PIXEL ;
      FONT oFont TITLE 'XBrowse Gradient Rows'

   @ 10,10 XBROWSE oBrw OF oDlg ;
      SIZE 300,200 PIXEL ;
      AUTOCOLS ALIAS 'CUST' BACKGROUND ""
     
   WITH OBJECT oBrw
      :bChange          := { || nRecSel := oBrw:BookMark }
      :nRowDividerStyle := LINESTYLE_NOLINES
      :nColDividerStyle := LINESTYLE_NOLINES
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW
   END

   AEval( oBrw:aCols, { |oCol| ;
      oCol:bPaintText := { |oCol, hDC, cData, aRect | ;
                           PaintCol( oCol, hDC, cData, aRect, nRecSel ) } ;
      } )

   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED

   CLOSE CUST
   RELEASE FONT oFont

return nil

static function PaintCol( oCol, hDC, cData, aRect, nRecSel )

   if nRecSel == CUST->( RecNo() )
      GradientFill( hDC, aRect[ 1 ] - 2, aRect[ 2 ] - 3, aRect[ 3 ] + 1, aRect[ 4 ] + 5,;
                    { { 1, RGB( 220, 235, 252 ), RGB( 193, 219, 252 ) } }, .T. )
      SetBkMode( hDC, 1 )
      RoundBox( hDC, 2, aRect[ 1 ] - 1, WndWidth( oCol:oBrw:hWnd ) - 22, aRect[ 3 ] + 1, 2, 2,;
                RGB( 235, 244, 253 ), 1 )
      RoundBox( hDC, 1, aRect[ 1 ] - 2, WndWidth( oCol:oBrw:hWnd ) - 21, aRect[ 3 ] + 2, 2, 2,;
                RGB( 125, 162, 206 ), 1 )
   endif

   SetTextColor( hDC, 0 )
   DrawTextEx( hDC, cData, aRect, oCol:nDataStyle )

return nil
 

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 8:16 am
by José Luis Sánchez
Queda realmente bonito !!!

Saludos,

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 11:04 am
by Antonio Linares
FiveWin nos permite hacer lo que queramos :-)

Su grado de libertad y de posibilidades es muy grande :-)

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 1:41 pm
by acuellar
Antonio

He compilado el ejemplo y me da error que no encuentra la funcion RoundBox, en que libreria esta.

Gracias por la ayuda

Saludos

adhemar

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 5:24 pm
by FranciscoA
Adhemar:
Omitiendo esas llamadas a RoundBox() tambien funciona el degradado. Pruébalo.
Lo único es que no llena la col de la flechita.
Saludos.

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 6:15 pm
by Antonio Linares
Adhemar,

Aqui está el código de la función RoundBox():
Code: Select all  Expand view
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( ROUNDBOX )
{
   HDC hDC = ( HDC ) hb_parni( 1 );
   HBRUSH hBrush = ( HBRUSH ) GetStockObject( 5 );
   HBRUSH hOldBrush = ( HBRUSH ) SelectObject( hDC, hBrush );
   HPEN hPen, hOldPen ;

   if( hb_pcount() > 8 )
      hPen = CreatePen( PS_SOLID, hb_parnl( 9 ), ( COLORREF ) hb_parnl( 8 ) );
   else
      hPen = CreatePen( PS_SOLID, 1, ( COLORREF ) hb_parnl( 8 ) );
   
   hOldPen = ( HPEN ) SelectObject( hDC, hPen );
   hb_retl( RoundRect( hDC ,
                                 hb_parni( 2 ),
                                 hb_parni( 3 ),
                                 hb_parni( 4 ),
                                 hb_parni( 5 ),
                                 hb_parni( 6 ),
                                 hb_parni( 7 ) ) );

   SelectObject( hDC, hOldBrush );
   DeleteObject( hBrush );
   SelectObject( hDC, hOldPen );
   DeleteObject( hPen );
}

#pragma ENDDUMP
 

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 7:22 pm
by acuellar
Gracias Antonio

Ahora me da un error en oBrw:Bookmark

Tengo FWH 9.04 y no se porque, he visto en el foro que lo usan con versiones anteriores.

Gracias una vez mas por la ayuda

Saludos

Adhemar