Page 1 of 1

Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 11:00 am
by jmartial
Hola,

Estoy intentando hacer una ventana con una imágen de fondo y en esa ventana poner un diálogo con fondo transparente con diversos controles, entre ellos una imágen .png o bmp.

El caso es que buscando en el foro, he conseguido poner el diálogo transparente con esto:

Code: Select all  Expand view
FUNCTION TranspColor( oWnd, nRGB )
    SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_BORDER )
    SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_EX_LAYERED )
    SetLayeredWindowAttributes( oWnd:hWnd, nRGB, 0, LWA_COLORKEY )
RETURN NIL
 


Pero cuando en el diálogo quiero poner la imágen, sale mal. Os pongo una imágen de como se ve en el diseño original hecho por un diseñador, y como queda en FWH con la orden:

Code: Select all  Expand view
REDEFINE BITMAP oBmp1 ID 105 OF oDlgAcceso FILENAME cPath+"Dominus_icononombre.bmp"


Aquí veis como queda en FWH y como estaba diseñado:

Image

Image

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 11:38 am
by jmartial
Hola,

He comprobado que poniendo la imágen en el fondo de la ventana, sale bien.

El problema es pintarlo sobre el diálogo que previamente se ha hecho transparente.

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 12:03 pm
by jmartial
Hola,

Compruebo también, que para hacer un diálogo transparente, hay que poner un color de Brush y ese es el que se usa para transparentarlo.

Bueno, pues si uso CLR_BLUE, la imágen la pinta bien pero CELESTITA. Si uso un verde, verdecita, etc. Es decir, no me deja igual la imágen, aparte de todo
me la colorea por ser blanca la original.

¿Qué solución tiene esto?

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 4:12 pm
by Antonio Linares
Joaquin,

Puedes poner una captura de pantalla del diálogo ?

Es para entender lo que quieres hacer exactamente y asi orientarte correctamente :-)

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 4:23 pm
by jmartial
Mira Antonio,

El primer muñeco de arriba es un png sobre la ventana y el de abajo, es el mismo sobre el diálogo transparentado con CLR_BLUE. Dime si lo entiendes.

Image

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 4:28 pm
by jmartial
Antonio,

Y para que veas que el transparentar es el problema, te lo muestro sin transparantar, mira que bien lo pinta. Sin problemas.

Image

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 4:33 pm
by Antonio Linares
Los ficheros PNGs tienen una capa de transparencia.

Si lo conviertes a BMP, y te aseguras de que no tenga transparencia, entonces posiblemente te funcione bien.

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 4:45 pm
by jmartial
No, ya lo había probado, pierde mucha calidad, mira que diferencia el de arriba con el de abajo que es un BMP sin transparencia.

Image

Re: Ayuda imágenes en un fondo

PostPosted: Tue Dec 30, 2014 5:34 pm
by Antonio Linares
Joaquin,

Pidámosle ayuda a Uwe que nuestro maestro en gráficos :-)

Uwe please help us! :-)

Re: Ayuda imágenes en un fondo

PostPosted: Wed Dec 31, 2014 8:45 am
by jmartial
Antonio,

Uwe no ha entendido el problema.

Puedes confirmarle que sí, que la imágen es alphachannel-Image ( 32bbp ).

Explícale, que es un diálogo transparentado el que presenta el problema, no pintándolo directamente en una ventana o diálogo.

Re: Ayuda imágenes en un fondo

PostPosted: Wed Dec 31, 2014 1:00 pm
by Antonio Linares
Uwe,

Joaquin says that the image is an alphachannel-Image ( 32bbp )

The problem appears as it is a transparent dialog, using the code that Joaquín posted here.

Many thanks for your help! :-)

Re: Ayuda imágenes en un fondo

PostPosted: Wed Dec 31, 2014 1:32 pm
by mastintin
Antonio , respecto a los comentarios en el foro ingles del compilador de borland y los problemas con los bitmaps de 32 bits , a demás del uso de pellesC que es una opción , creo que mejor solución es usar el rc de microsoft , ahora que se distribuye free . Se puede usar sin ningún problema con bcc582 y son cuatro archivos que apenas ocupan . Los he colocado en la carpeta bin de bcc582 y a funcionar con bmps 32bits.
Si pudiera mandar un código autocontenido y el bmps , podríamos buscar una solución "alternativa"

Re: Ayuda imágenes en un fondo

PostPosted: Wed Dec 31, 2014 2:00 pm
by mastintin
He adaptado el código de testtran.prg un poco para ver el efecto , pero aquí parece que funciona bien ...
Code: Select all  Expand view


FUNCTION MAIN()

DEFINE DIALOG oDlg TITLE "FiveWin Dynamic folders" ;
      FROM 5, 5 TO 60, 150 COLOR "N/G"

 ACTIVATE DIALOG oDlg CENTERED ;
 ON PAINT MSGLOGO( "..\bitmaps\metro\users.bmp", 5 )

    RETURN NIL


FUNCTION MSGLOGO( cImage, nSeconds )

    LOCAL oDlg, oTimer, oImage

    DEFAULT nSeconds := 5

    DEFINE DIALOG oDlg;
           SIZE 800, 600;
           STYLE WS_POPUP;
           BRUSH TBrush():New( "NULL" )

    DEFINE TIMER oTimer OF oDlg;
           INTERVAL nSeconds * 1000;
           ACTION oDlg:End()

    @ 3, 5 IMAGE oImage;
           FILE cImage;
           SIZE 800, 600;
           NOBORDER

    oImage:lTransparent = .T.

    ACTIVATE DIALOG oDlg;
             ON INIT ( oTimer:hWndOwner := oDlg:hWnd,;
                       oTimer:Activate(),;
                       SETTRANSP( oDlg ) );
             CENTER

    RETURN NIL


#define LWA_COLORKEY 1

#define GWL_EXSTYLE -20

#define WS_EX_LAYERED 524288


STATIC FUNCTION SETTRANSP( oDlg )
   SETWINDOWLONG( oDlg:hWnd, GWL_EXSTYLE, NOR( GETWINDOWLONG( oDlg:hWnd, GWL_EXSTYLE ), WS_EX_LAYERED ) )
   SETLAYEREDWINDOWATTRIBUTES( oDlg:hWnd, , , LWA_COLORKEY )
RETURN NIL
 

Re: Ayuda imágenes en un fondo

PostPosted: Wed Dec 31, 2014 4:09 pm
by mastintin
pues si que hay diferencias y muchas dependiendo que se usa .... voy a poner ejemplos ...
imagen usando end.png con IMAGE ( freeimage) desde dialogo izq. y dialogo transparente decb.
Usando el comando BITMAP sale exactamente el mismo resultado ( usa funciona interna FWH.
Image
usando "truco" gdiplus ...en dialogo queda perfecto , en transparente solo regular ...
Image