Colaboraciones en el Guille

PictureBox redondeado

[Dibujar una figura sobre la imagen del PictureBox con un objeto GraphicsPath]

 

Fecha 08/Feb/2006 (8 de Febrero de 2006)
Autor: Miliuco (Emilio Pérez Egido)

 



Clase GraphicsPath

La clase GraphicsPath, del espacio de nombres System.Drawing.Drawing2D, tiene objetos que representan figuras (líneas y curvas conectadas). Las aplicaciones usan estas secuencias de datos con líneas y curvas (path) para dibujar los bordes de las figuras, rellenar el interior de las figuras y crear zonas de recorte. El motor gráfico mantiene las coordenadas de las figuras geométricas en objetos path. Los objetos path puede estar formados a su vez por otras figuras (subpath).

Cada figura se compone de:

El punto de comienzo de una figura es el primer punto en la secuencia de líneas y curvas conectadas. A efectos de relleno y recorte, todas las figuras aparecen como cerradas, añadiendo una línea del punto final al punto inicial.

Algunos miembros de la clase GraphicsPath son:

Es posible dibujar un objeto GraphicsPath con alguno de los métodos listados más arriba o con el método Graphics.DrawPath:

Public Sub DrawPath( ByVal p As Pen, ByVal path As GraphicsPath )

Parámetros que se pasan al método Graphics.DrawPath:

Etiquetas transparentes

En algunas ocasiones puede ser conveniente que las etiquetas aplicadas sobre la imagen de un PictureBox tengan su fondo transparente.

Para que Label sea transparente, hay que establecer su propiedad BackColor en Color.Transparent. La propiedad BackColor es una propiedad de ambiente. Una propiedad de ambiente es una propiedad de control que, si no se establece, se recupera del control principal. Por ejemplo, de forma predeterminada, el control Label tendrá la misma propiedad BackColor que su control Form principal.

Si hay otro control entre el control (Label) y el primario correspondiente (Form), Label no mostrará el control situado en medio sino el control primario (Form). Por ejemplo, las etiquetas transparentes situadas sobre un PictureBox cogen el color de fondo del formulario y no el del PictureBox (que es el control intermedio). Esto quiere decir que, si colocamos una etiqueta transparente sobre un control PictureBox, la etiqueta no coge como color de fondo el color del control que tiene debajo (PictureBox) sino el color del control primario del que deriva (Form).

Podemos hacer que la etiqueta coja como color de fondo el de la imagen que tiene debajo añadiéndola al grupo de controles de PictureBox con el método Controls.Add, de esta manera PictureBox se convierte en el control primario de Label (en lugar de Form) y es con él con el que simula la transparencia:

Me.PictureBox1.Controls.Add(Me.Label1)

Enumeración ControlStyles

La propiedad BackColor no admite colores transparentes a menos que el estilo ControlStyles.SupportsTransparentBackColor (de la enumeración ControlStyles) se establezca en True. La enumeración ControlStyles especifica el estilo y el comportamiento de un control. Los controles utilizan esta enumeración en diferentes propiedades y métodos que varían su funcionalidad. Un control puede habilitar un estilo llamando al método SetStyle y pasando el estilo o estilos ControlStyles correspondientes y el valor de tipo booleano en el que va a establecerse el estilo. Por ejemplo, la siguiente línea de código habilitaría el doble búfer en el control miControl:

miControl.SetStyle ( UserPaint Or AllPaintingInWmPaint Or DoubleBuffer, True )

La siguiente línea de código habilitaría el color de fondo transparente y el doble búfer para un control Form:

Me.SetStyle(ControlStyles.ResizeRedraw Or _
ControlStyles.SupportsTransparentBackColor
Or _
ControlStyles.UserPaint
Or _
ControlStyles.AllPaintingInWmPaint _
Or ControlStyles.DoubleBuffer, True
)

En un ejemplo real, si el bit SupportsTransparentBackColor del formulario se establece en True y la propiedad BackColor de Label se establece en color transparente, OnPaintBackground simulará la transparencia pidiendo al control primario (Form) que pinte el fondo de Label. Ésta no es una transparencia real, la transparencia se simulará sólo si se establece el bit UserPaint en true y si el control primario deriva de Control. Si UserPaint (otro miembro de ControlStyles) es True, es el propio control en lugar del sistema operativo el que se pinta a sí mismo. Este estilo sólo se aplica a las clases derivadas de Control.

Código en Visual Basic .NET

Imagen del programa

Imagen del programa en funcionamiento

Enlaces relacionados

Graphics.DrawPath Method (Microsoft MSDN)

Rendering a Windows Forms Control (Microsoft MSDN)

Botones Redondos Paso a Paso (Microsoft MSDN)


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_picturebox.zip - 170 KB

(MD5 checksum: [6ABF090CE30403AED1E681C767A4F13F])


ir al índice principal del Guille