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
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.