Page 1 of 16

La nueva apariencia de EasyReport

PostPosted: Fri Aug 15, 2014 3:39 am
by Antonio Linares
Image

Image

Re: La nueva apariencia de EasyReport

PostPosted: Fri Aug 15, 2014 8:33 am
by bpd2000
Nice
Thank you

Re: La nueva apariencia de EasyReport

PostPosted: Sun Aug 17, 2014 10:39 am
by lucasdebeltran
Enhorabuena, tiene una pinta increíble.

Re: La nueva apariencia de EasyReport

PostPosted: Tue Aug 26, 2014 12:25 am
by cnavarro
Que os parece si cuando no seleccionamos ningun ejemplo y tenemos la aplicacion en "blanco", los iconos aparecieseen en gris y no solo los prompts de los iconos?
Tambien para las opciones no disponibles en cada momento

Image

Re: La nueva apariencia de EasyReport

PostPosted: Tue Aug 26, 2014 7:15 am
by Antonio Linares
Cristobal,

Muy bien! :-)

Gracias!

Re: La nueva apariencia de EasyReport

PostPosted: Tue Aug 26, 2014 3:59 pm
by cnavarro
Entonces subo los bmps, el cambio en el código y el .rc modificado, Ok?

Re: La nueva apariencia de EasyReport

PostPosted: Tue Aug 26, 2014 8:26 pm
by mastintin
cnavarro wrote:Entonces subo los bmps, el cambio en el código y el .rc modificado, Ok?

Muy bueno. :-)
He añadido los bmp al archivo vdrPellesC.rc y lo he subido al repositorio .
Saludos.

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 5:56 am
by mastintin
dandole vueltas al asunto de los bmps en gris .... como mejora para fivewin ... creo que existe una función ( por algún sitio la he visto ) dentro del código c de fivewin que vuelve un bmp a gris , con eso se podría implementar un metodo en la clase Tbmp que invocándolo cree un bmp en gris , y de eso cambiar la clase buttonbar con una dataclass ldisableenGris ,si no se especifica un bmp para disabled lo que hace es crearlo en gris y asignarlo . Nos evitaría tener que generar nosotros los bmps grises y tener que colocarlos dentro de los recursos , y reduciría el tamaño del fichero recursos .

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 7:36 am
by Biel EA6DD
Así es como lo tengo yo implementado, modificando la clase btnBmp, el método LoadBitmaps, si no se ha definido el tercer bimap, convierto a gris el primero.
Code: Select all  Expand view

IF Empty(cBmpFile3)
   ::hBitMap3  = Bmp2Dis( ::hBitMap1 )
ENDIF
 

Code: Select all  Expand view

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

#define ROSA RGB(255,0,255)
#define BLANCO RGB(255,255,255)
HB_FUNC( BMP2DIS )
{
   HBITMAP hBmpMem, hOldBmp, hOldBmp2;
   COLORREF nColor;
   int nX;
   int nY;

   HDC hDC     = CreateDC("DISPLAY", 0, 0, 0);
   HDC hDCMem  = CreateCompatibleDC( hDC );
   HDC hDCMem2 = CreateCompatibleDC( hDC );
   HBITMAP hBitmap = (HBITMAP) hb_parnl( 1 );

   BITMAP bm;
   GetObject( ( HGDIOBJ ) hBitmap, sizeof( BITMAP ), ( LPSTR ) &bm );

   hBmpMem = CreateCompatibleBitmap( hDC, bm.bmWidth, bm.bmHeight );
   hOldBmp = (HBITMAP) SelectObject( hDCMem, hBmpMem );

   hOldBmp2 = (HBITMAP) SelectObject( hDCMem2, hBitmap );

   BitBlt( hDCMem, 0,0,bm.bmWidth, bm.bmHeight, hDCMem2, 0, 0, SRCCOPY );

   for (nX = 0; nX < bm.bmWidth ; nX++ )
   {
       for (nY = 0; nY < bm.bmHeight ; nY++ )
      {
           nColor = GetPixel( hDCMem, nX, nY );
           if( nColor != ROSA && nColor!=BLANCO )
           {
              SetPixel( hDCMem, nX, nY, RGB( 192, 192, 192) );
           }
       }
   }

   SelectObject( hDCMem, hOldBmp );
   SelectObject( hDCMem2, hOldBmp2 );
   DeleteDC( hDCMem );
   DeleteDC( hDCMem2 );
   DeleteDC( hDC );

   hb_retnl( (LONG) hBmpMem );
}
 


En las últimas versiones de FWH ha habido cambios en la clase tBtnBmp, y no lo tengo adaptado a esas versiones, pero creo que se trata solo de poner algún que otro IF y listo.
La función en C desconozco si la propia librería ya la tiene implementada, quizás no haga falta volver a incluirla, pero bueno por si la necesitáis estos son los fuentes.

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 7:39 am
by cnavarro
Gracias Biel
La idea es muy buena Manuel

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 10:58 am
by mastintin
Biel , lo he intentado pero o algo hago mal o no tengo el resultado esperado :-) .
Me sale como una mancha gris en vez el icono en escala de grises , mirando el código de la funcion lo que se hace es cambiar los pixeles a gris pero siempre el mismo gris no una escala de grises ( distintos grises dependiendo del color a variar ) .
Una manera de hacerlo seria sacar el color del pixel sacar su valor de color R ( por ejemplo ) y asignarle el valor al pixel rgb( valorR , 0, 0 ) , esto en teoría debería sacar el canal r del pixel .

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 12:19 pm
by Biel EA6DD
Cierto, está función no convierte a escala de gris sino que pasa a gris todos los colores menos blanco y fucsia.

A mi gusta para el efecto disabled, pero si es un bmp con poco blaco y fucsia efectivamente queda una mancha. Creo que tengo otra que convierte a escala de grises, la busco.

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 12:54 pm
by Biel EA6DD
Bmp a escala de grises
Code: Select all  Expand view

#define FUCSIA RGB(255,0,255)
#define BLANCO RGB(255,255,255)
HB_FUNC( BMP2DIS )
{
   HBITMAP hBmpMem, hOldBmp, hOldBmp2;
   COLORREF nColor;
   int nX;
   int nY;
   int red,green,blue;

   HDC hDC     = CreateDC("DISPLAY", 0, 0, 0);
   HDC hDCMem  = CreateCompatibleDC( hDC );
   HDC hDCMem2 = CreateCompatibleDC( hDC );
   HBITMAP hBitmap = (HBITMAP) hb_parnl( 1 );

   BITMAP bm;
   GetObject( ( HGDIOBJ ) hBitmap, sizeof( BITMAP ), ( LPSTR ) &bm );

   hBmpMem = CreateCompatibleBitmap( hDC, bm.bmWidth, bm.bmHeight );
   hOldBmp = (HBITMAP) SelectObject( hDCMem, hBmpMem );

   hOldBmp2 = (HBITMAP) SelectObject( hDCMem2, hBitmap );

   BitBlt( hDCMem, 0,0,bm.bmWidth, bm.bmHeight, hDCMem2, 0, 0, SRCCOPY );

   for (nX = 0; nX < bm.bmWidth ; nX++ )
   {
       for (nY = 0; nY < bm.bmHeight ; nY++ )
      {
           nColor = GetPixel( hDCMem, nX, nY );
           if( nColor != FUCSIA && nColor!=BLANCO )
           {
              red = GetRValue( nColor ) ;
              green = GetGValue( nColor ) ;
              blue = GetBValue( nColor )  ;
              nColor = (0.3 * red + 0.59 * green + 0.11 * blue + 0.5 );
              SetPixel( hDCMem, nX, nY, RGB( nColor , nColor , nColor ) );
           }
       }
   }

   SelectObject( hDCMem, hOldBmp );
   SelectObject( hDCMem2, hOldBmp2 );
   DeleteDC( hDCMem );
   DeleteDC( hDCMem2 );
   DeleteDC( hDC );

   hb_retnl( (LONG) hBmpMem );
}
 

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 12:57 pm
by mastintin
Muchas gracias Biel , también existia ( sabia que en algún sitio estaba ) BMPTOGRAY( hbitmap ) que pertenece a el archivo c5new.c enlazado en fivewin ....
Tu función da un resultado mas oscuro , el otro quizás en demasiado claro ... a gustos colores ... me quedo con tu función ...

Re: La nueva apariencia de EasyReport

PostPosted: Wed Aug 27, 2014 1:26 pm
by mastintin
Listo tengo los cambios en la función BtnBmp .....

Code: Select all  Expand view


CLASS TBtnBmp FROM TControl

....

  DATA   lDisableToGray INIT .t.    // añadido
....


METHOD LoadBitmaps( )
.....

 if ! Empty( cResName2 )
      ......
   endif
   if Empty( cResName3 ) .and. Empty(  cBmpFile3 )  // añadido ...
      IF ! Empty( cResName1 )
         cResName3:= cResName1
      endif
      IF ! Empty( cBmpFile1 )
         cBmpFile3:= cBmpFile1
      endif
   endif

if ! Empty( cResName3 )
     IF  FindResource( GetResources(), cResName3 , 10 )  != 0
        ....
     ELSE
         ....
      endif

      IF ::lDisableToGray  // añadido
         ::hBitmap3:= BMP2DIS( ::hBitmap1  )
      endif

     ::HasAlpha( ::hBitmap3, BTN_DISABLE )
   endif

.....

  if ! Empty( cBmpFile3 )
      if File( cBmpFile3 )
         ::cBmpFile3 = cBmpFile3
         if Upper( Right( cBmpFile3, 3 ) ) == "PNG"
         ....
         else
            ....
        endif
          IF ::lDisableToGray  // añadido
             ::hBitmap3:= BMP2DIS( ::hBitmap1  )
          endif
         ::HasAlpha( ::hBitmap3, BTN_DISABLE )
         ::cBmpFile3 = cBmpFile3
      endif
   endif
   .....


#define FUCSIA RGB(255,0,255)
#define BLANCO RGB(255,255,255)

HB_FUNC( BMP2DIS )
{
   HBITMAP hBmpMem, hOldBmp, hOldBmp2;
   COLORREF nColor;
   int nX;
   int nY;
   int red,green,blue;

   HDC hDC     = CreateDC("DISPLAY", 0, 0, 0);
   HDC hDCMem  = CreateCompatibleDC( hDC );
   HDC hDCMem2 = CreateCompatibleDC( hDC );
   HBITMAP hBitmap = (HBITMAP) hb_parnl( 1 );

   BITMAP bm;
   GetObject( ( HGDIOBJ ) hBitmap, sizeof( BITMAP ), ( LPSTR ) &bm );

   hBmpMem = CreateCompatibleBitmap( hDC, bm.bmWidth, bm.bmHeight );
   hOldBmp = (HBITMAP) SelectObject( hDCMem, hBmpMem );

   hOldBmp2 = (HBITMAP) SelectObject( hDCMem2, hBitmap );

   BitBlt( hDCMem, 0,0,bm.bmWidth, bm.bmHeight, hDCMem2, 0, 0, SRCCOPY );

   for (nX = 0; nX < bm.bmWidth ; nX++ )
   {
       for (nY = 0; nY < bm.bmHeight ; nY++ )
      {
           nColor = GetPixel( hDCMem, nX, nY );
           if( nColor != FUCSIA && nColor!=BLANCO )
           {
              red = GetRValue( nColor ) ;
              green = GetGValue( nColor ) ;
              blue = GetBValue( nColor )  ;
              nColor = (0.3 * red + 0.59 * green + 0.11 * blue + 0.5 );
              SetPixel( hDCMem, nX, nY, RGB( nColor , nColor , nColor ) );
           }
       }
   }

   SelectObject( hDCMem, hOldBmp );
   SelectObject( hDCMem2, hOldBmp2 );
   DeleteDC( hDCMem );
   DeleteDC( hDCMem2 );
   DeleteDC( hDC );

   hb_retnl( (LONG) hBmpMem );
}