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]
6 marzo, 2007 a las 10:10 am
Y si te «comes» la barra de arriba, donde pone el titulo, y salen los botoncitos de minimizar, maximizar y cerrar ya no podemos trabajar con la ventana aunque si que es posible que nos quedara más bonita. Entonces ya tendriamos que implementar esa funcionalidad a pelo o hay alguna otra manera de hacerlo????
6 marzo, 2007 a las 10:32 am
Evidentemente pierdes las funcionalidades que tienes en la parte superior de una ventana común pero no son dificiles de implementar. En cuanto tenga tiempo explico como hacerlo.
De todas formas tienes más libertad de movimientos en cuanto a que puedes colocar lo botones que hagan esto en donde tu quieras.
Saludetes [H]
6 marzo, 2007 a las 2:19 pm
Eeeyy Cesar he estado probando tu ejemplillo y esta muy chulo, para no perder la funcionalidad de minimizar, maximizar y cerrar la ventana, he probado a crearla como un semicirculo y queda muy chula, mateniendo esas opciones.
Sustituir este código:
path.AddEllipse(0, -(this.Height/2), this.Width, this.Height);
6 marzo, 2007 a las 10:38 pm
Se pueden hacer cosas bastante curiosas, a ver si entre las cosillas que tengo que hacer y la charla de XNA que me abacan de endiñar para este jueves puedo hacer un ejemplo un poco más chulejo.
Saludetes [H]