10 de octubre de 2006

Formularios con fondos de colores degradados con GDI+

Artículo original: Gradient Backgrounds in your forms with GDI
http://weblogs.foxite.com/vfpimaging/archive/2006/06/13/1825.aspx 
Autor: Cesar Ch.
Traducido por: Ana María Bisbé York 

Este escrito va para Bernard Bout.

Después de leer este post, vea también Gradient Backgrounds in your forms with GDI+ Part 2 (traducido al español en PortalFox como "Formularios con fondos de colores degradados con GDI+ Parte 2").





GDI+ permite crear muchos efectos tales como degradado de colores. Esta característica no se incluyó en _gdiplus.vcx; pero se puede acceder fácilmente con una única llamada a la función Flat de API. La mayor parte del código que se muestra a continuación relacionado con la brocha con Degradado es de Bob Durban.

Aplicarlo en formularios es realmente sencillo. Agregue el código que está debajo a los eventos del formulario: LOAD, RESIZE y DESTROY

Load Event
LOCAL lcGradFile
lcGradFile = ADDBS(SYS(2023))+SYS(2015)+".bmp"
This.AddProperty("cTempGradFile",lcGradFile)
IF FILE(lcGradFile)
  CLEAR RESOURCES (lcGradFile)
ENDIF
LOCAL lnRGBColor1
lnRGBColor1 = RGB(60,30,180) && Blue

* Crear la imagen para el degradado con GdipCreateLineBrushI 
SET CLASSLIB TO HOME() + "ffc/_gdiplus.vcx" ADDITIVE

* Declarar API
DECLARE Long GdipCreateLineBrushI IN GDIPLUS.dll ;
  String point1, String point2, ;
  Long color1, Long color2, ;
  Long wrapMode, Long @lineGradient

* Crear un objeto color y guarda los valores de color ARGB en variables
LOCAL loClr AS GpColor OF HOME() + "ffc/_gdiplus.vcx"
LOCAL lnColor1, lnColor2
loClr = CREATEOBJECT("gpColor")
loClr.FoxRGB = lnRGBColor1
lnColor1 = loClr.ARGB
loClr.FoxRGB = RGB(255,255,255) && White
lnColor2 = loClr.ARGB

* Crear un bitmap
LOCAL loBmp AS GpBitmap OF HOME() + "ffc/_gdiplus.vcx"
loBmp = CREATEOBJECT("gpBitmap")
loBmp.Create(1,Thisform.Height)

* Obtener un objeto gráfico bitmap 
LOCAL loGfx AS GpGraphics OF HOME() + "ffc/_gdiplus.vcx"
loGfx = CREATEOBJECT("gpGraphics")
loGfx.CreateFromImage(loBmp)

* Obtener una brocha con degradado
LOCAL loBrush as GpBrush OF HOME() + "ffc/_gdiplus.vcx"
LOCAL hBrush && Brush Handle
hBrush = 0
GdipCreateLineBrushI(BINTOC(0,"4rs")+BINTOC(0,"4rs"), ;
  BINTOC(0,"4rs")+BINTOC(Thisform.Height,"4rs"), ;
  lnColor1, lnColor2, 0, @hBrush)
loBrush = CREATEOBJECT("gpBrush")
loBrush.SetHandle(hBrush, .T.)

* Llenar nuestro mapa de bits con el degradado
loGfx.FillRectangle(loBrush,0,0,1,Thisform.Height)
loBmp.SaveToFile(lcGradFile,"image/bmp")
Thisform.AddObject("ImgBackGround","Image")
WITH Thisform.ImgBackGround
  .Stretch = 2
  .Width = Thisform.Width
  .Height = Thisform.Height
  .Picture = lcGradFile 
  .Visible = .T.
ENDWITH
RETURN

Resize Event
Thisform.ImgBackGround.Width = Thisform.Width
Thisform.ImgBackGround.Height = Thisform.Height

Destroy Event
WITH Thisform
  IF FILE(.cTempGradFile)
    CLEAR RESOURCES (.cTempGradFile)
    ERASE (.cTempGradFile)
  ENDIF
ENDWITH

Las nuevas clases GDI+

El código que he presentado en el evento LOAD funciona muy bien; pero tiene una apariencia bastante fea, al compararlo con lo que seremos capaces de hacer cuando sean liberadas las nuevas clases Sedna-X GDI+

El código que aparece a continuación va a sustituir todo el código relacionado con la creación del color degradado en el evento LOAD.

¡Es que no puedo esperar a que estén finalizadas estas clases!

Su trabajo es realmente brillante, y va a añadir mucho más que una clase envoltorio (wrapper)
* Crear una imagen con degradado lineal GDI+ utilizando 
* las clases xfc GDI+ de Bo Durban y Craig Boyd
System = NEWOBJECT("xfcSystem","system.vcx")
LOCAL loBmp AS xfcBitmap
LOCAL loGfx AS xfcGraphics
LOCAL loBrush AS xfcBrush
WITH System.Drawing 
  loBmp = .Bitmap.New(1, Thisform.Height) 
  loGfx = .Graphics.FromImage(loBmp) 
  loBrush = .Drawing2D.LinearGradientBrush.New( ; 
    .Rectangle.New(0, 0, 1, Thisform.Height), ; 
    .Color.FromRGB(lnRGBColor1), .Color.White, 1) 
  loGfx.FillRectangle(loBrush, loBrush.Rectangle) 
  loBmp.Save(lcGradFile, .Imaging.ImageFormat.Bmp) 
ENDWITH





Haga clic para descargar el código fuente de este formulario de ejemplo

No hay comentarios. :

Publicar un comentario