FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour gradiente en fila seleccionada en xbrowse
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 08:00 PM
Adhemar,

Esta versión es mas simple y no necesita los bookmarks:
Code (fw): Select all Collapse
#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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 08:19 PM
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
Saludos,



Adhemar C.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 08:40 PM
Adhemar,

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

   ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 08:54 PM

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

Saludos,



Adhemar C.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 09:14 PM

Adhemar,

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

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 09:19 PM

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

Saludos,



Adhemar C.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 09:33 PM

Bien! :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: gradiente en fila seleccionada en xbrowse
Posted: Thu Dec 10, 2009 03:26 PM

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,

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Thu Dec 10, 2009 07:50 PM

José Luis,

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Thu Dec 10, 2009 08:22 PM
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 (fw): Select all Collapse
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 );
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Thu Dec 10, 2009 10:12 PM

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.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: PARA JOSE LUIS SANCHEZ
Posted: Mon Aug 02, 2010 01:22 PM
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
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: gradiente en fila seleccionada en xbrowse
Posted: Mon Aug 16, 2010 07:56 AM

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

Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: gradiente en fila seleccionada en xbrowse
Posted: Mon Aug 16, 2010 10:05 AM
Hola,
Ya he encontrado la manera de hacerlo. En el métido DrawLine() de XBrowse buscar las líneas:
Code (fw): Select all Collapse
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 (fw): Select all Collapse
            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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Mon Aug 16, 2010 10:23 AM