FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Color degradado en dialogos
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM

Color degradado en dialogos

Posted: Tue Jul 29, 2008 01: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

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
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
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM

Color degradado en dialogos

Posted: Tue Jul 29, 2008 09: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.

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM

Color degradado en dialogos

Posted: Wed Jul 30, 2008 07: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
oCheck:lTransparent := .T.


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

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM

Color degradado en dialogos

Posted: Wed Jul 30, 2008 05: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.

Saludos



Fernando Espinoza
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Color degradado en dialogos

Posted: Wed Jul 30, 2008 06:19 PM
Fernando,

Aqui tienes un ejemplo:

test.prg:
#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
#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
}



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

Antonio Linares
www.fivetechsoft.com
Posts: 326
Joined: Sun Oct 09, 2005 05:22 PM

Color degradado en dialogos

Posted: Wed Jul 30, 2008 06: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.

Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM

Color degradado en dialogos

Posted: Wed Jul 30, 2008 07: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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Color degradado en dialogos

Posted: Wed Jul 30, 2008 08:43 PM
Seguro que asi os gusta más :-)

#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


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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Color degradado en dialogos

Posted: Wed Jul 30, 2008 08:50 PM
Modificando el recurso para que se aprecien mejor los colores:

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM

Color degradado en dialogos

Posted: Thu Jul 31, 2008 06: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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Color degradado en dialogos

Posted: Thu Jul 31, 2008 08: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
Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM

alguno sample

Posted: Thu Jul 31, 2008 02: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

Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM

Color degradado en dialogos

Posted: Fri Aug 01, 2008 08: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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Color degradado en dialogos

Posted: Fri Aug 01, 2008 08: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
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM

Color degradado en dialogos

Posted: Fri Aug 01, 2008 08: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

Continue the discussion