Page 2 of 3

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 8:00 pm
by Antonio Linares
Adhemar,

Esta versión es mas simple y no necesita los bookmarks:
Code: Select all  Expand view
#include 'fivewin.ch'
#include 'xbrowse.ch'

function Main()

   local oDlg, oBrw, oFont

   USE CUSTOMER ALIAS CUST

   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 ""
     
   oBrw:nRowDividerStyle = LINESTYLE_NOLINES
   oBrw:nColDividerStyle = LINESTYLE_NOLINES
   oBrw:nMarqueeStyle    = MARQSTYLE_HIGHLROW

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

   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

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

   if oCol:oBrw:VGetPos() == Cust->( OrdKeyNo() )
      GradientFill( hDC, aRect[ 1 ] - 2, aRect[ 2 ] - 3, aRect[ 3 ] + 1, aRect[ 4 ] + 5,;
                    { { 1, RGB( 220, 235, 252 ), RGB( 193, 219, 252 ) } }, .T. )
      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:19 pm
by acuellar
Gracias Antonio

Ahora da un error en BACKGROUND "", lo elimino y funciona, pero cuando avanza no pone en blanco el anterior
no se si sera por esto.

Gracias de nuevo

Saludos

Adhemar

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 8:40 pm
by Antonio Linares
Adhemar,

Pruebalo asi:
Code: Select all  Expand view

   @ 10, 10 XBROWSE oBrw OF oDlg ;
      SIZE 300, 200 PIXEL ;
      AUTOCOLS ALIAS 'CUST'
     
   oBrw:SetColor( "N/W" )
   oBrw:lTransparent = .T.

   ...
 

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 8:54 pm
by acuellar
Gracias Antonio

solo con oBrw:lTransparent = .T. Funcionó perfecto

Lo aplique a un xBrowse que muestra un array colocando

if oCol:oBrw:VGetPos() == oBrw:nArrayAt

Funciona, pero cuando pasa por una linea vacia no muestra en gradient

Gracias una vez mas por la ayuda, se ve muy bonito

Saludos

Adhemar

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 9:14 pm
by Antonio Linares
Adhemar,

Bien, me alegro de que esté funcionando :-)

Cuando dices una línea vacia, te refieres a un elemento del array que está vacio "" ?

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 9:19 pm
by acuellar
Asi es, un elemento vacio ""

Lo he solucionado aumentandole el caracter 255 al final en el momento de cargar la tabla.

Gracias distinguido por su ayuda valiosa

Saludos

Adhemar

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Tue Dec 08, 2009 9:33 pm
by Antonio Linares
Bien! :-)

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Thu Dec 10, 2009 3:26 pm
by José Luis Sánchez
Me pregunto que pasa cuando en la fila hay un bitmap. No se si con esta manera de pintar el degradado cuando haya un bitmap en la fila el fondo del bitmap aparecerá degradado. Si alguien lo puede probar y confirmar que funciona bien lo agradecería.
Saludos,

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Thu Dec 10, 2009 7:50 pm
by Antonio Linares
José Luis,

Si, para mostrar los bitmaps habría que hacerlo desde la función PaintCol()

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Thu Dec 10, 2009 8:22 pm
by carlos vargas
Antonio, una consulta

en le código de roundbox, hDC no seria una variable tipo long en lugar de una integer?, es que casi siempre que creo funciones wrapper, y estas necesitan
hDC lo pongo a long?


Code: Select all  Expand view

HB_FUNC( ROUNDBOX )
{
   HDC hDC = ( HDC ) hb_parnl( 1 );                            //<-----------------hbparnl en lugar de hbparni
   HBRUSH hBrush = ( HBRUSH ) GetStockObject( 5 );
   HBRUSH hOldBrush = ( HBRUSH ) SelectObject( hDC, hBrush );
 

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Thu Dec 10, 2009 10:12 pm
by Antonio Linares
Carlos,

Si, es preferible usar un long en vez de int :-)

Lo que ocurre es que en 32 bits ese valor también puede ser admisible pues admite un rango de valores muy grande.

Re: PARA JOSE LUIS SANCHEZ

PostPosted: Mon Aug 02, 2010 1:22 pm
by FranciscoA
José Luis Sánchez wrote:Me pregunto que pasa cuando en la fila hay un bitmap. No se si con esta manera de pintar el degradado cuando haya un bitmap en la fila el fondo del bitmap aparecerá degradado. Si alguien lo puede probar y confirmar que funciona bien lo agradecería.
Saludos,


Hola José Luis. ¿Lograste resolverlo? Estoy en eso pero no lo consigo. Una ayudita no me vendría mal.
Saludos

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Mon Aug 16, 2010 7:56 am
by José Luis Sánchez
Hola,
Retomo el tema del gradiente para los que tenemos versiones antiguas de FWH. Si en vez de el gradiente nos contentamos con pintar los rebordes de la fila seleccionada con las dos lineas, la de fuera azul y la de dentro blanca, creo que se solucionarían los problemas de pintado cuando la última fila no tiene datos ( cData está vacio ). Creo que esto se podría hacer en el método Paint(), igual que se pinta el selector de fila ( el triangulito ), cuando se ha terminado de pintar todas las columnas hacer los dos rebordes. Estoy mirando cómo hacer esto pero no doy con ello, si alguien me pudiera ayudar lo agradecería.
Saludos,
José Luis

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Mon Aug 16, 2010 10:05 am
by José Luis Sánchez
Hola,
Ya he encontrado la manera de hacerlo. En el métido DrawLine() de XBrowse buscar las líneas:
Code: Select all  Expand view
if ::lRecordSelector
      if lSelected
         PalBmpDraw( hDC, nRow + ( nHeight / 2 ) - 8, RECORDSELECTOR_WIDTH - 15,;
                     ::hBmpRecSel, 0, 9, 14,, .t., ::nRecSelColor )

y añadir el pintado de los bordes de esta manera, y luego seguir con el else de no lSelected
Code: Select all  Expand view
            RoundBox( hDC, 2, nRow , ::BrwWidth()- 6, nRow+::nRowHeight, 2, 2,;
                                     RGB( 235, 244, 253 ), 1 )
            RoundBox( hDC, 1, nRow -1, ::BrwWidth()- 5, nRow+::nRowHeight+1, 2, 2,;
                                     RGB( 125, 162, 206 ), 1 )
      else
         FillRect( hDC,;

No es el gradiente, pero el efecto es bastante parecido y sin problemas de columnas vacias. Igual hay otra manera de hacerlo, o en versiones actuales de FWH ya funciona esto, pero yo salgo del paso con esto.
Cualquier aportación será bienvenida.
Saludos,
José Luis

Re: gradiente en fila seleccionada en xbrowse

PostPosted: Mon Aug 16, 2010 10:23 am
by Daniel Garcia-Gil