Formulario redondeado[Aplicar regiones a un formulario, usando objetos GraphicsPath, para cambiar su forma]
Fecha: 15/Feb/2006 (15 de Febrero de 2006)
|
Resumen
Utilizando objetos GraphicsPath y aplicando regiones de recorte es sencillo modificar la forma de un formulario. Podemos darle prácticamente cualquier aspecto pero, por sencillez del código, en este ejercicio nos restringiremos a 4 formas:
- círculo, rombo y polígono usando objetos GraphicsPath y regiones de recorte con el aspecto deseado.
- forma irregular (estrella) usando como BackgroundImage del formulario una imagen, uno de cuyos colores será definido como transparente para que no se muestre.
Código en Visual Basic .NET
La presentación de este tipo de formularios queda mejor si en el diseñador de Visual Studio configuramos su propiedad FormBorderStyle en none.
Para conseguir el aspecto de un formulario redondeado:
'ACTUAMOS EN EL EVENTO PAINT DE Form1 Private Sub Captura_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint 'objeto de la clase GraphicsPath Dim gp As GraphicsPath = New GraphicsPath 'rectángulo para hacer el recorte Dim rect As Rectangle 'las medidas (0, 0, 294, 294) equivalen a (Left, Top, Width, Height) de Form1 rect = New Rectangle(0, 0, 294, 294) 'método que superpone una figura (círculo en este caso) al objeto GraphicsPath gp.AddEllipse(rect) 'región de recorte que se crea a partir del objeto GraphicsPath recortado Dim reg As Region reg = New Region(gp) 'ésta es la región visible de Form1 Me.Region = reg 'mejorar el aspecto del borde redondeado aplicando antialias e.Graphics.SmoothingMode = SmoothingMode.AntiAlias End SubPara conseguir el aspecto de un formulario romboidal:
'ACTUAMOS EN EL EVENTO LOAD DE Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'objeto de la clase GraphicsPath 'para determinar cómo se rellena su interior se usa un parámetro, 'un objeto de la emumeración FillMode que tiene 2 miembros: Alternate y Winding Dim GP As GraphicsPath = New GraphicsPath(FillMode.Alternate) 'se van añadiendo líneas, definidas por su punto x.y de inicio y de final 'coordenadas calculadas respecto a la ventana visible del formulario GP.AddLine(0, 147, 147, 0) GP.AddLine(147, 0, 294, 147) GP.AddLine(294, 147, 147, 294) GP.AddLine(147, 294, 0, 147) 'recortar el objeto GraphicsPath con la forma generada por las líneas Me.Region = New Region(GP) End SubPara conseguir el aspecto de un formulario poligonal:
'ACTUAMOS EN EL EVENTO LOAD DE Form3 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'objeto de la clase GraphicsPath 'para determinar cómo se rellena su interior se usa un parámetro, 'un objeto de la emumeración FillMode que tiene 2 miembros: Alternate y Winding Dim GP As GraphicsPath = New GraphicsPath(FillMode.Alternate) 'se van añadiendo líneas, definidas por su punto x.y de inicio y de final 'coordenadas calculadas respecto a la ventana visible del formulario GP.AddLine(60, 0, 234, 0) GP.AddLine(234, 0, 294, 294) GP.AddLine(294, 294, 0, 294) GP.AddLine(0, 294, 60, 0) 'recortar el objeto GraphicsPath con la forma generada por las líneas Me.Region = New Region(GP) End SubPara conseguir el aspecto de un formulario con forma de estrella:
'ACTUAMOS EN EL EVENTO LOAD DE Form4 Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'objeto Bitmap para contener la imagen que se usa de fondo del formulario Dim bmp As Bitmap bmp = New Bitmap(Application.StartupPath & "\Fondo.bmp") 'el color del pixel(1,1) (esquina sup. izda.) del Bitmap será renderizado 'como transparente en el Bitmap (color RGB 255,0,0) bmp.MakeTransparent(bmp.GetPixel(1, 1)) 'colocar el Bitmap como fondo del formulario Me.BackgroundImage = bmp 'el color del pixel(1,1) (esquina sup. izda.) del Bitmap será renderizado 'como transparente también en el formulario (color RGB 255,0,0) Me.TransparencyKey = bmp.GetPixel(1, 1) End SubImagen del programa en funcionamiento
Espacios de nombres usados en el código de este artículo:
System.Drawing
System.Drawing.Drawing2D
Fichero con el código de ejemplo: miliuco_formredondo.zip - 280 KB
(MD5 checksum: [75601219C080DE6F84AF3CAF58AF7327])