Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Avanzadas
[Formas con diseño avanzado]
Fecha: 13/May/2005 (04-Mayo-2005)
Autor: Ewing Morales (ewingmarx@yahoo.com)
Intentaré (en una serie de colaboraciones) mostrar como poder elaborar interfaces
de aplicaciones que impacten no solo a los neófitos sino también a los doctos, en
espera que el camino que yo ya recorrí en mi aprendizaje de VB.Net y k.o. le sirva
a los demás para lograr de manera más rápida y sencilla su objetivo.
La primera les mostrara como hacer que las aplicaciones se vean como uno
quiere y no como Windows puede.
La segunda mostrara como hacer un botón realmente personalizado por medio
de una imagen.
Como se logro esto, bueno, no es mas que un conjunto de trucos, pero eso si, muy
buenos y que no solo les pueden servir para esto sino para mas cosas que deseen
hacer.
Descripción de componentes
1) Antes que nada necesitamos un buen diseño grafico, yo diseño con photoshop
(de cuya introducción saque la idea del formulario), pero pueden utilizar cualquier
otra aplicación que les permita guardar PNGs (en el código va el png que utilizo).
2) Necesitan un formulario con las mismas medidas que la imagen PNG (en
realidad eso no es necesario pero para casos de aprender, háganlo así). Definan su
propiedad FormBorderStyle como None y asignen a BackgroundImage el png
que crearon.
3) Agreguen un control de tipo Panel, pónganle como nombre LTitulo, hagan que
sea transparente y ubíquenlo sobre la porción de imagen que deseen que sea su
barra de control que les permita arrastrar la ventana del formulario.
4) Creen ahora un botón (por ahora trabajaremos con los normales y feos) que se
llame Cerrar para que cuando le demos Click se cierre el formulario.
Hasta ahora no hemos visto nada de código pero a continuación mostramos que se
puede hacer con el panel LTitulo y el botón Cerrar.
this.Opacity = 0.20;
MuestraImagen(true);
}
//
======================================================================
====
#endregion
Vemos en el código los eventos Down, Up y Move del ratón para nuestro panel
LTitulo, por lo tanto debemos hacer la correspondiente asociación eventos -
funciones para que pueda funcionar, así mismo para el evento Click del botón
Cerrar que definimos. La manera más rápida de hacer esto es desde el panel de
propiedades de la interfaz de desarrollo como se muestra a continuación (fíjense en
los iconos que tengo seleccionados de este panel para poder hacerlo):
if (mueveForma)
{
graphics.Clear(Color.White);
}
else
{
CapturaForm.Control(this);
graphics.DrawImage(this.BackgroundImage,
rectangle,
0, 0, img.Width, img.Height,
System.Drawing.GraphicsUnit.Pixel);
}
graphics.DrawImage(img,
rectangle,
0, 0, img.Width, img.Height,
System.Drawing.GraphicsUnit.Pixel);
graphics.Dispose();
this.BackgroundImage = result;
this.Refresh();
}
#endregion
Acuérdense de asociar los eventos Load, Activated y Deactivate del formulario a las
funciones correspondientes que aparecen en el código anterior.
La siguiente imagen les puede dar una idea de como se vería el formulario al
arrastrarlo (y es cuando nuestro truco queda un rato al descubierto).
7) Por ultimo, necesitas las funciones y agregados para poder realizar las capturas
de pantalla. Yo encontré estas funciones en la red y es software libre (PSDLA: en el
código viene una breve descripción de los términos) publicado por Excellence
Foundation (Don@xfnd.org). Las funciones originales permiten otros tipos de
capturas, pero especialmente la adecuación que yo hice nos sirve para estos fines
en específico, ni más ni menos. Estas librerías están definidas bajo los namespaces
Captura y Dll y se encuentran en el propio código principal, para que no batallen
con dlls externas. Las puse bajo un grupo región a cada una para que en tu código
solo las veas de la siguiente manera:
+ "NameSpace Captura"
+ "NameSpace DLL"
¿Puedes ver el código? ¿Puedes modificarlo? Por supuesto que si. Simplemente no
me meto a explicarlo porque es mejor que los veamos como auxiliares y no como el
núcleo de la aplicación.
También es importante que su definición vaya hasta lo último del código ya que al
parecer existe un bug en el Visual Studio tal que si lo pones al principio, empiezas a
tener problemas con las imágenes que utilices en tus controles. ¿Por qué? No tengo
idea pero al menos pasa aquí en mi maquina. De cualquier manera pónganlos al
final.
Personalicen
Pueden personalizar sus formularios, agregando mas PNGs, solo recuerden que
deben ponerlos como imágenes de fondo de objetos tipo Panel. Los objetos como
Label o PictureBox tienen sus propias deficiencias que no permiten explotar al
máximo una aplicación gráfica como esta que queremos implementar. En mi caso la
idea es hacer un informador del clima, el cual me mostrará el clima actual y su
pronóstico. Por entendido se da que la información vendrá lo mas gráfico que se
pueda (vean el informador del clima del Dashboard de Apple OSX).
System.Runtime.InteropServices