Usando una WebCam con Windows Form – Parte 2: Grabando

Siguiendo la serie de artículos Usando una WebCam  con Window Forms, esta vez crearemos un programa para grabar lo que veamos en la WebCam. En este caso vamos a usar las librerías Aforge.Video (para tener acceso a la clase NewFrameEventArgs), Aforge.Video.DirectShow (para usar la clase VideoCaptureDevice entre otras) y Aforge.Video.VFW (usaremos la clase AVIWriter para grabar un archivo .avi). Como comenté en el artículo pasado, debemos cambiar el Framework de Destino -si usamos .NET Framework 4.0– a .NET Framework 3.5. Vamos a usar un Form sencillo, solo un PictureBox que mostrará la cámara web, un ComboBox que va a contener los diferentes dispositivos de captura, un Button para iniciar el dispositivo seleccionado y otro para iniciar la grabación. El diseño quedaría así:

El código que vamos a usar es casi una copia exacta del artículo pasado, así que esta vez sólo voy a poner el código que he usado para grabar la WebCam. Sigue leyendo

Usando una WebCam con Windows Form | Parte 1: Captura

Uno de los programas que a las personas les gusta aprender a hacer es el de controlar una cámara web mediante .NET Framework. En este artículo utilizaremos las librerías que están incluidas en el Framework de Aforge.NET para hacer un programa que interactúe con nuestra cámara web.

Primero se debe aclarar que este Framework no funciona con .NET Framework 4.0, por eso debemos cambiar el Framework de Destino: Explorador de Soluciones –> Propiedades del Proyecto (Alt + Entrar) –> Aplicación.

Ahora comencemos con nuestro Form, utilizaremos 2 PictureBox (1 para mostrar la WebCam y otro para hacer una Captura), 3 Botones (1 Para Iniciar la WebCam, otro para capturar una imagen y otro para guardar la imagen capturada) y un ComboBox (mostrará los diferentes dispositivos de video). Nos debe quedar algo como:

Sigue leyendo

Estilos y Plantillas – ScrollViewer

Hola, ya tenía tiempo de no escribir así que voy a tratar de reivindicarme explicando un poco de cómo hacer estilos y plantillas para nuestros controles. Estaba haciendo un programa cuando me cansé del ScrollViewer que viene por defecto, buscando en Internet encontré algo que me gustó bastante, así que busqué cómo llegar a eso y usando este artículo de Sacha Barber y este de la librería Microsoft terminé con esto:

Para llegar a esto, vamos a tener que cortar mucha tela, así que comencemos con una imagen de lo que vamos a hacer:

Tomada de: http://sachabarber.net/?p=122

Primero que todo crearemos los RepeatButton de las esquinas:

 

 

 

 

Sigue leyendo

Averiguar las instancias de SQL Server instaladas

Ya hace un tiempo que en el primer artículo de este blog publiqué una de las formas de cómo obtener las instancias de SQL Server instaladas en el computador. He querido retomar ese artículo pero con una nueva propuesta:

using System.Data.Sql;

public static DataTable Instancias()
{
    DataTable enume = SqlDataSourceEnumerator.Instance.GetDataSources();
    return enume;
}
private void Form1_Load ( object sender, EventArgs e )
{
    dataGridView1.DataSource = Instancias ();
}

El resultado de pedazo de código va a ser una tabla con el nombre del Servidor, el nombre de la Instancia, IsClustered y la versión de la Instancia. Les dejo una imagen de cómo queda.

Nota: SqlDataSourceEnumerator retorna todas las instancias disponibles de SQL Server incluidas en la red local.

Comandos, Parámetros y MVVM

Los comandos son un buen agregado al patrón MVVM pues esto permite manejar los eventos desde el ViewModel (VM). En el anterior artículo vimos el comando Ingresar, el cual nos permitía “iniciar sesión” cuando los valores que se ingresaban eran correctos. Esta vez quiero explicar un poco más acerca de los Comandos y me voy a valer de un ejemplo; además mostrar que los parámetros que se asignan al comando pueden ser triviales, como texto de un TextBox, usar un convertidor para crear un Model como lo vimos en al artículo pasado o,como vamos a ver hoy, para pasar un Control.

Crearemos un programa el cual va a añadir o eliminar Elipses (Ellipse), las cuáles crearemos en nuestro VM como puntos -de tipo Points-. estas elipses serán dibujadas en un ItemsControl al cual llamaremos Contenedor y el cuál almacenará un control contenedor (en este caso usaremos Canvas) y ahí se dibujarán los puntos usando los valores de X y Y que nos suministre el punto del VM. Utilizaremos 2 Botones los cuales nos ayudarán a Agregar o Eliminar puntos.

Comencemos con el VM de nuestro ejemplo pues en este proyecto no usaremos un modelo.

Usaremos un ObservableCollection de Points, ya hemos usado este tipo de colección así que si necesita más información puede consultar la MSDN Library

public Punto ()
{
    PointList = new ObservableCollection<Point> ();
}

public ObservableCollection<Point> PointList { get; set; }

Sigue leyendo

Validación en WPF

Como ya les había mencionado en el artículo anterior de aquí en adelante vamos a ver la maravillosa propiedad Binding de WPF (Windows Presentation Foundation). En este artículo se supone que el lector tendrá conocimiento básico de cómo hacer un Bind entre una propiedad y un control. Uno de los mayores dolores en WPF es la validación de datos. Un error frecuente en la validación es el siguiente.

Como pueden ver en la imagen, la validación de los campos se hace desde el principio de la aplicación haciendo que se vea “feo”. Qué se puede hacer para que lo visto en la imagen no ocurra. Aquí se da una propuesta para solucionar este error, pero en este artículo expondré la forma que yo he utilizado.

Manos a la obra!

Ya les he mostrado la Vista (View) del proyecto, pero, antes de entrar a ver el código xaml miremos nuestro Modelo (Model) y nuestra VistaModelo (ViewModel).

Nota: he usado el patrón MVVM para realizar este proyecto aunque no he seguido todos los reglamentos.

Modelo

public class UsuarioModel : INotifyPropertyChanged, IDataErrorInfo
{

	private string correo;
	public string Correo
	{
		get
		{
			return correo;
		}
		set
		{
			if ( correo == value ) return;

			correo = value;
			RaisePropertyChanged ( "Correo" );
		}
	}

	private string contraseña;
	public string Contraseña
	{
		get
		{
			return contraseña;
		}
		set
		{
			if ( contraseña == value ) return;

			contraseña = value;
			RaisePropertyChanged ( "Contraseña" );
		}
	}
}

Sigue leyendo

2 Ventanas usando WPF de forma Desacoplada

Tiempo atrás vimos en un artículo la forma de comunicar dos ventanas WPF usando eventos, esta vez vamos a usar una interfaz. MSDN Library define de esta manera las interfaces.

Las interfaces describen un grupo de funcionalidades relacionadas que pueden pertenecer a cualquier elemento class o struct. Define una interfaz utilizando la palabra clave de interfaz (interface).

Comencemos porque son bastantes cosas las que veremos. Primero miremos la interfaz.

public interface Enlace
{
    void agregar ( string firstName, string lastName );
}

Bastante sencilla no? Ahora miremos su implementación en la ventana Padre.

public void agregar ( string firstName, string lastName )
        {
            NameList nl = Resources["NameListData"] as NameList;
            nl.Add ( new PersonName ( firstName, lastName ) );
        }

Sigue leyendo