Tips: limando bordes

En el truquejo de hoy lo que vamos a hacer es en vez de limar los bordes de una ventana, nos los vamos a comer [pi][:D].

Antes de nada quiero decir que este es un método alternativo al de poner una imagen de fondo en la ventana y luego indicar el color que quieres que sea transparente. Ambos son completamente válidos pero dependiendo del tiempo que tengamos, esta manera puede ser más eficaz que la otra, creo que da menos problemas con la profundidad de color en el escritorio que la otra.

Bueno al lio que me enrollo. Nos vamos a poner a construir una ventana redonda, luego partiendo de este método se pueden construir polígonos, curvas y otras figuras pero llevan más tiempo de hacer.

Existe una propiedad en los formularios denominada Region que nos permite mostrar solamente de una ventana la parte delimitada por esta región, es decir, si nosotros (como vamos a hacer) hemos construido un cuadrado y le decimos que la región a mostrar es un circulo, la región lo que hace es ocultar todo lo demás y solo veremos ese círculo.

Entonces para crear nuestra ventana redonda necesitamos crearnos un objeto Graphics Path que es donde tenemos que indicar la forma de nuestra región.

System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();

Luego el objeto tiene un método AddEllipse al que le indicamos las coordenadas de inicio y el tamaño () ancho y alto:

path.AddEllipse(0, 0, this.Width,this.Height);

Con esto ya hemos definido el área que queremos mostrar y ahora necesitamos definir un nuevo objeto Region que nos permita hacerlo:

Region miregion = new
Region(path);

this.Region = miregion;

Le indicamos el nuevo valor a la propiedad y ponemos la propiedad FormBorderStyle a none.

Como todo esto se hace en tiempo
de ejecución lo tenemos que poner en el evento Load del formulario. A
continuación tenéis el código completo, ya veis que es bastante corto, sin
embargo podéis probar en vez de añadir una elipse, un polígono con las
coordenadas que vosotros queráis, aún así tampoco es muy complicado.

private
void Form1_Load(object sender, EventArgs e)

{

System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();

path.AddEllipse(0, 0, this.Width,this.Height);


Region miregion = new
Region(path);


this.Region = miregion;

}

Saludetes [H]