Color degradado en dialogos

Color degradado en dialogos

Postby fgondi » Tue Jul 29, 2008 1:00 pm

¿Cómo puedo establecer un color degradado en el fondo de un cuadro de dialogo?

He probado esto que he visto en el foro

Code: Select all  Expand view  RUN
oDlg:bPainted := {|| Gradiente(oDlg)}

Proc Gradiente( oDlg )
local nGradient, oBrush
local aRect := GetClientRect( oDlg:hWnd )
local hDC   := oDlg:hDc
nGradient := Gradient(hDc, { aRect[1], aRect[2], aRect[3], aRect[4] }, nRgb(255,255,255), nRgb(224,236,255), .T. )
DEFINE BRUSH oBrush COLOR nGradient
FillRect( hDC, aRect, oBrush:hBrush )
ReleaseDC( oDlg:hWnd, hDC )
return


El problema es que en el dialogo existen controles radios buttons y checkbox, y estós no cogen el color de fondo.

También he leido que la forma correcta es teniendo un degradado en un bitmap y estableciendo el fondo con
Code: Select all  Expand view  RUN
DEFINE BRUSH oBrush FILENAME "C:\fwh\bitmaps\backgrnd\gradien.bmp"
Define Dialog oDlg Title cTitle Resource "MSGGET_TXT" TRANSPARENT Brush oBrush


Pero el problema es que tendría que crear un bitmap por cada dialogo, si estos cambian de largo.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby Carlos Mora » Tue Jul 29, 2008 9:14 pm

Hola Fernando,

deja lo del gradiente, pero añade las cláusulas de 'transparente' en los controles. Asi el fondo del control no se pinta y queda el fondo que pinto el dialogo.

Un saludo,
Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby fgondi » Wed Jul 30, 2008 7:04 am

Hola Carlos,

Gracias por tu tiempo.


Nada, que sigo sin conseguirlo.
He probado a definir el recurso con la condición WS_EX_TRANSPARENT
He probado a cambiar el valor ::transparent del objeto CheckBox
Code: Select all  Expand view  RUN
oCheck:lTransparent := .T.


Ni con cada una por separado ni con las dos juntas he conseguido mostar el checkbox sin el fondo gris.

Image
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby fespinoza » Wed Jul 30, 2008 5:44 pm

Carlos

Creo que lo que te aconsejan es agregar el TRANSPATENT directamente así por ejemplo:

REDEFINE GROUP oGrp ID 8101 OF oFld:aDialogs[1] TRANSPARENT

Yo lo hice con un group dentro de un folder y me funciono bien; no he probado con RADIO ni con CHECKBOX.
User avatar
fespinoza
 
Posts: 188
Joined: Wed Feb 01, 2006 6:59 pm
Location: Ecuador

Postby Antonio Linares » Wed Jul 30, 2008 6:19 pm

Fernando,

Aqui tienes un ejemplo:

test.prg:
Code: Select all  Expand view  RUN
#include "FiveWin.ch"

function Main()

   local oBrush, oDlg, oRad, nVal := 1, oCbx, lVal := .T., oGrp

   DEFINE BRUSH oBrush FILE "..\bitmaps\grad.bmp"

   DEFINE DIALOG oDlg RESOURCE "Test" BRUSH oBrush TRANSPARENT

   REDEFINE RADIO oRad VAR nVal ID 10 OF oDlg
   
   REDEFINE CHECKBOX oCbx VAR lVal ID 20 OF oDlg
   
   REDEFINE GROUP oGrp ID 30 OF oDlg
   
   REDEFINE BUTTON ID 1 OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

return nil


Test.rc
Code: Select all  Expand view  RUN
#ifdef __FLAT__
   1 24 "winxp\WindowsXP.Manifest"
#endif

test DIALOG 17, 36, 185, 147
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Test"
FONT 8, "MS Sans Serif"
{
RADIOBUTTON "Radio", 10, 24, 15, 60, 12, BS_AUTORADIOBUTTON
CHECKBOX "Checkbox", 20, 24, 31, 60, 12, BS_AUTOCHECKBOX | WS_TABSTOP
GROUPBOX "Group", 30, 18, 50, 145, 38, BS_GROUPBOX
DEFPUSHBUTTON "OK", 1, 67, 128, 50, 14
}

Image

Aqui tienes los ficheros y el EXE:
http://www.mediafire.com/?utl0mmjnut2
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Alfredo Arteaga » Wed Jul 30, 2008 6:54 pm

Tengo el mismo problema que Fernando.

Veo que si se usa como fondo una imagen, al crear el BRUSH se genera el recurso hBitmap mismo que es tomado por los controles incluidos.

Pero si el BRUSH es generado con un color no hay hBitmap, posiblemente por ahí este el secreto.
User avatar
Alfredo Arteaga
 
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico

Postby wmormar » Wed Jul 30, 2008 7:20 pm

Alfredo,

efectivamente ese es el problema (checado), si el degradado se basa en un pintado sin la creacion de un BRUSH, pues sinplemente no lo toma en cuenta, y cuando se hace el degradado por una imagen, ahi si toma la caracteristica de transparente los controles.

saludos

Alfredo Arteaga wrote:Tengo el mismo problema que Fernando.

Veo que si se usa como fondo una imagen, al crear el BRUSH se genera el recurso hBitmap mismo que es tomado por los controles incluidos.

Pero si el BRUSH es generado con un color no hay hBitmap, posiblemente por ahí este el secreto.
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Postby Antonio Linares » Wed Jul 30, 2008 8:43 pm

Seguro que asi os gusta más :-)

Code: Select all  Expand view  RUN
#include "FiveWin.ch"

function Main()

   local oDlg, oRad, nVal := 1, oCbx, lVal := .T., oGrp
   local hBmp := ReadBitmap( 0, "rainbow.bmp" )

   DEFINE DIALOG oDlg RESOURCE "Test" TRANSPARENT

   REDEFINE RADIO oRad VAR nVal ID 10 OF oDlg
   
   REDEFINE CHECKBOX oCbx VAR lVal ID 20 OF oDlg
   
   REDEFINE GROUP oGrp ID 30 OF oDlg
   
   REDEFINE BUTTON ID 1 OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED ;
      ON PAINT DrawBitmap( hDC, hBmp, 0, 0, oDlg:nWidth, oDlg:nHeight )

   DeleteObject( hBmp )

return nil

Image
Aqui teneis el PRG y el EXE. Podeis modificar el bitmap usado y cambiarlo por uno vuestro. Requiere un nuevo build de FWH 8.07:
http://www.mediafire.com/?nbh21ugth3t
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Wed Jul 30, 2008 8:50 pm

Modificando el recurso para que se aprecien mejor los colores:

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby fgondi » Thu Jul 31, 2008 6:36 am

Antonio,

Como siempre mejorando el sistema. Así da gusto :wink:

De esa forma sólo necesito crear un bitmap de 1 pixel de ancho con el color degradado ya que luego se puede agrandar hasta cubir el espacio.

El major problema que veía a no poder redimensionar la imagen era en las ventanas mdi.

En los dialogos, al fin y al cabo, era crear varias imagenes, un poco engorroso, pero que remedio.

Sin embargo en las mdi veia un problema. Las ventanas cambian de tamaño segun la resolución y tenía que crear una imagen por cada resolución posible, que anda que no hay, sobre todo ahora con los monitores de 22'' bajando el precio.

Pero con esta aportación creo que esta todo solucionado.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby Antonio Linares » Thu Jul 31, 2008 8:57 am

Fernando,

Acabamos de publicar una revisión de FWH 8.07 que ya incluye esta característica :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

alguno sample

Postby fleal » Thu Jul 31, 2008 2:55 pm

Fernando

//De esa forma sólo necesito crear un bitmap de 1 pixel de ancho con el color degradado ya que luego se puede agrandar hasta cubir el espacio.

¿Algún ejemplo de eso que mencionas?

Yo tambien varios bmps de diferentes tamaños para mis dialogos.


Gracias
Fernando Leal
fleal
 
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Postby fgondi » Fri Aug 01, 2008 8:11 am

Antonio,

Acabo de adquirir 8.07 y al compilar he comprobado que sigue viendose con el fondo gris.

Ya he leido en el foro en inglés que habeis visto el problema en XP
http://fivetechsoft.com/forums/viewtopic.php?t=12117

Fernando,

El ejemplo es el que publica Antonio en este post, cambiando "rainbow.bmp" por una imagen con el color degradado.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby Antonio Linares » Fri Aug 01, 2008 8:35 am

Fernando,

En Vista funciona bien, pero no lo hace bien en XP. De hecho hasta hemos probado en Wine (soporte para Windows en Linux y OSX) y tampoco funciona.

Lo curioso es que FillRect() si funciona. Asi que hemos revisado el código fuente de FillRect() (de los fuentes open source de Wine) y lo único que hace es una llamada a PatBlt(). Por alguna razón el API de Windows en XP tolera que se use un brush desde el mensaje WM_CTLCOLOR... pero no admite una copia de hDC a hDC.

Vamos a intentar hoy mismo una solución alternativa, que consistiría en generar sobre la marcha un pequeño bitmap con el fondo de la imagen del control y usarlo como brush para el control. A ver si así conseguimos que XP lo admita.

La verdad es que Microsoft debería cuidar estos detalles y mantener compatibilidad entre XP y Vista. El caso es que lo han arreglado en Vista y no lo han arreglado en XP.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby fgondi » Fri Aug 01, 2008 8:49 am

Antonio,

Gracias por vuestro tiempo.

La verdad es que Microsoft debería cuidar estos detalles y mantener compatibilidad entre XP y Vista. El caso es que lo han arreglado en Vista y no lo han arreglado en XP.


Con la cantidad de problemas que tienen en Vista y lo estable que es XP deberían preocuparse mas de buque insignia.

Pues si en la service pack 3 incluian muchas mejoras que habían hecho en Vista y algo tan basico como esto no lo han incluido, a uno le hacen dudar de las mejoras de la service pack 3.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 39 guests