Cesar trabaja esta vez en una solución que nos permite utilizar archivos disponibles, convertidos a MBP y con transparencia.
Convierta sus botones en BMPs manteniendo la transparencia con GdiPlus
Artículo original: Convert your buttons to BMPs keeping transparency with GdiPlusX
http://weblogs.foxite.com/cesarchalom/archive/2007/11/14/5404.aspx
Autor: Cesar Chalom (http://weblogs.foxite.com/cesarchalom)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)
La siguiente función convierte cualquier imagen de botón en BMP para ser utilizado en formularios VFP.
Existen muchos iconos gratis y disponibles en la red; pero la gran mayoría tienen formatos ICO, GIF o PNG, que no son muy fiables para ser utilizadas en VFP. Para nosotros, el mejor formato de imagen, por muchas razones, es el formato BMP.
Son necesarias algunas transformaciones para hacer que este BMP muestre exactamente cómo que se desea, especialmente cuando convierte algunas imágenes originales en formato PNG, GIF o ICO.
VFP muestra el blanco puro - RGB(255,255,255) como transparente en nuestros botones y objetos image. El código que se muestra a continuación, convierte primero el blanco original a RGB(254,254,254) que visualmente es lo mismo; pero no se vuelve transparente y elimina la necesidad de crear una máscara de imagen (MSK) y además, convierte el color de fondo del bitmap original en blanco puro, lo que provocará que se muestre transparente en formularios VFP.
Para más detalles compruebe, por favor, estos escritos:
BMPs with Transparent Backgrounds - (Nota de la traductora: Este articulo esta traducido al español en PortalFox: "BMPs con fondos transparentes")
How to put one image over another in a form - (Nota de la traductora: Este articulo esta traducido al español en PortalFox: "Cómo poner una imagen sobre otra en un formulario")
IMPORTANTE
Necesita VFP9 y GdiPlusX para ejecutarlo 
Asegúrese de que tiene la última versión, debido a que este ejemplo puede estar utilizando algunas funciones que hemos agregados o reparado recientemente.
http://www.codeplex.com/VFPX/Wiki/View.aspx?title=GDIPlusX&referringTitle=Home
Guarde el programa siguiente como BUTTON2BMP.PRG y llámelo de esta forma:
Button2Bmp(GETPICT(), "c:\NewIcon.bmp")
Cuando compile este programa en su ejecutable, no olvide, por favor, quitar el comando LOCFILE(), en su lugar, emplee: Do System.prg
LPARAMETERS tcSourceFile, tcDestFile
DO LOCFILE("System.prg")
LOCAL loBmp AS xfcBitmap
LOCAL loGfx AS xfcGraphics
LOCAL loBorderClr AS xfcColor
LOCAL loRect AS xfcRectangle
LOCAL loAttr AS xfcImageAttributes
LOCAL loColorMap AS xfcColorMap
WITH _SCREEN.SYSTEM.Drawing
loColorMap = .Imaging.ColorMap.New()
loAttr = .Imaging.ImageAttributes.New()
loBmp = .Bitmap.FromFile(tcSourceFile)
loGfx = .Graphics.FromImage(loBmp)
loRect = loBmp.GetBounds()
* Toma el color del pixel que está más arriba a la izquierda,
* asumiendo que este color es el color de fondo BackGround para volverlo transparente
* Para nuestro BMP, será BLANCO PURO - RGB(255,255,255)
* que se convierte en transparente en objetos VFP
loBorderClr = loBmp.GetPixel(0,0)
* Convierte los blancos originales RGB(255,255,255) a OFF WHITE - RGB(254,254,254)
* de esta forma, los blancos se mantendrán, sin necesidad de máscara
loColorMap.OldColor = .Color.White
loColorMap.NewColor = .Color.FromARGB(255,254,254,254)
loAttr.SetRemapTable(loColorMap)
loGfx.DrawImage(loBmp, loRect, loRect, .GraphicsUnit.Pixel, loAttr)
* El siguiente paso, convertir los bordes en blanco puro, RGB(255,255,255)
* que lo convertirá en transparente en los botones.
loColorMap.OldColor = loBorderClr
loColorMap.NewColor = .Color.White
loAttr.SetRemapTable(loColorMap)
loGfx.DrawImage(loBmp, m.loRect, m.loRect, .GraphicsUnit.Pixel, loAttr)
loBmp.Save(tcDestFile, .Imaging.ImageFormat.Bmp)
ENDWITH
|