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.