FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour gradiente en fila seleccionada en xbrowse
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
gradiente en fila seleccionada en xbrowse
Posted: Thu Dec 03, 2009 02:00 PM

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,

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: gradiente en fila seleccionada en xbrowse
Posted: Fri Dec 04, 2009 05:16 AM

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=3t=17545

&

Regards



G. N. Rao.

Hyderabad, India
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: gradiente en fila seleccionada en xbrowse
Posted: Fri Dec 04, 2009 07:46 AM

Thanks for yor kind answerd. It's just what I was looking for.

Regards,

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Fri Dec 04, 2009 09:25 AM

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

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: Fri Dec 04, 2009 06:30 PM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Fri Dec 04, 2009 08:58 PM

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 :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Sat Dec 05, 2009 06:36 AM

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.

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: Mon Dec 07, 2009 03:43 PM
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,

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 02:46 AM
Jose Luis,

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



Code (fw): Select all Collapse
#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
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: Tue Dec 08, 2009 08:16 AM

Queda realmente bonito !!!

Saludos,

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 11:04 AM

FiveWin nos permite hacer lo que queramos :-)

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

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 01:41 PM
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
Saludos,



Adhemar C.
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 05:24 PM

Adhemar:
Omitiendo esas llamadas a RoundBox() tambien funciona el degradado. Pruébalo.
Lo único es que no llena la col de la flechita.
Saludos.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: gradiente en fila seleccionada en xbrowse
Posted: Tue Dec 08, 2009 06:15 PM
Adhemar,

Aqui está el código de la función RoundBox():
Code (fw): Select all Collapse
#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
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 07:22 PM
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
Saludos,



Adhemar C.