windows forms

Thumbnail en Windows 7

Posted on Actualizado enn

Hola, siguiendo con esta serie de post sobre desarrollo para Windows 7, vamos a ver como podemos establecer thumbnails para nuestras aplicaciones, un thumbnail es la imagen que se muestra cuando ponemos el mouse sobre le icono de algún escritorio.
Si no establacemos uno personalizado por defecto se verá la ventana de la aplicación.
La idea aca es tener 8 imágenes diferentes, y al seleccionar alguna de las imágenes esta se convertira en el thumbnail de la aplicación.
La aplicación se verá algo así:
Asi cuando se cambie de selección la imágen el thumbnail tambien cambiara..ahora el poco código detrás…
Private Sub PictureBoxImage1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBoxImage1.Click,
PictureBoxImage2.Click,
PictureBoxImage3.Click,
PictureBoxImage4.Click,
PictureBoxImage5.Click,
PictureBoxImage6.Click,
PictureBoxImage7.Click,
PictureBoxImage8.Click
Dim oPicture As PictureBox
Call FondoBlanco()
oPicture = TryCast(sender, PictureBox)
If TypeOf (oPicture) Is PictureBox Then
oPicture.BackColor = Color.AliceBlue
End If

If ValidaSO() Then
Dim iLeft As Integer = 0
Dim iWidth As Integer = 0
iLeft = oPicture.Left + TabControl1.Left + GroupBox7.Left + TabPage4.Left
iWidth = oPicture.Top + TabControl1.Top + GroupBox7.Top + TabPage4.Top
Dim oRec As New Rectangle(iLeft, iWidth, oPicture.Width, oPicture.Height)
TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(Me.Handle, oRec)
Else
MsgBox(“Su sistema operativo no permite ejecutar las nuevas caracterisiticas de Windows 7, por favor actulize su sistema.”, MsgBoxStyle.Information, “Sistema no soportado”)
End If
End Sub
Se define un manejador para todos los eventos clic de los 8 diferetnes picturebox, declaramos un objeto de tipo picturebox, luego hacemos un cast al sender (sender digamos en resumen que es el objeto que realiza el evento) para obtner el picturebox que genero el evento y lo asignamos al picturebox creado; cambiamos el color de fondo del picture para poder ver visualmente la imágen seleccionada, luego debemos obtener el rectangulo que corresponde a dicha imagen o picturebox, para este caso declaramos dos variables (iLeft, iWidth) para poder tener la posición en x y en y respectivamente.
Ahora, para poder obterne la posición tanto en x como en y, usamos la siguiente lógica, cada control dentro del formulario tiene una posición en x y una y relativa al control que lo contiene, es decir, para el ejemplo la posición x del picture será en relación al groupbox que lo contiene, este groupbox a su vez la tendrá en relación al tabpage, este tabpage al tabcontrol y el tabcontrol al formulario, asi que vamos a sumar todos estos valores en x y en y para poder obtener la posición correcta.
Luego creamos un objeto de tipo rectangle el cual será definido por la posición y el tamaño del picturebox.
Dim oRec As New Rectangle(iLeft, iWidth, oPicture.Width, oPicture.Height)
Por último lo asignamos al tasbarmanager…
TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(Me.Handle, oRec)
Y listo.. como ven es algo sencillo, lo único (por lo menos para mi algo tedioso es obtener el rectangulo correcto para poder asignarlo como thumbnail…
Nos vemos en el siguiente post !

JumpList en Windows 7

Posted on Actualizado enn

Hola, de nuevo con Windows 7, ahora vamos a ver como podemos añardir accesos directos al jumplist de nuestra app, el jumplist resumiendo es la lista que se muestra cuando se da clic derecho sobre el icono de alguna aplicación.

Los pasos para poder agregar tareas al jumplist son los sigueintes:

1. Declarar una variable de tipo JumpList

Dim oJumpList As JumpList

2. Decirle que vamos a crear un nuevo jumplist (generalmente lo hago en el load)

oJumpList = JumpList.CreateJumpListForIndividualWindow(“OverlayIcon”, Me.Handle)

3. Ahora vamos a tener una interfaz con  cuatro opciones, las cuales van a hacer referencia a 4 carpetas especiales del disco, las cuales son:

  • Música
  • Documentos
  • Imágenes
  • Programas

La idea es que nuestro jumplist tenga accesos directos a estas 4 carpetas.

4. Para poder agregar un elemento al jumplist lo primero que hago es traer la ruta de la carpeta seleccionada:

Dim sRuta As String = String.Empty

sRuta = My.Computer.FileSystem.SpecialDirectories.MyMusic

5. Agregar esa ruta como tarea al jumplist, darle un título y establecerle un icono.

oJumpList.AddUserTasks(New JumpListLink(sRuta, “Mi Música”) With {.IconReference = New IconReference(Path.Combine(sFolder, “explorer.exe”), 0)})

6. Listo, es todo.

Ha sido un rápido ejemplo de como podemos agregar tareas al jumplist de nuestra aplicación, es realmente sencillo, al final la aplicación debe lucir algo así:

Espero sea de utilidad y por algunos post más seguiremos hablando sobre Windows 7…

Link al ejemplo !!

 

Barra de progreso en Windows 7

Posted on Actualizado enn

En el post anterior vimos como usar iconos de estado para mostrarle al usuario el estado de la aplicación, hoy vamos a ver como podemos usar una barra de progreso en el icono de nuestra app, asi como ls diferentes tipos/estilos de barra que podemos utilizar.

Usar este tipo de ayudas es de gran utilidad a los usuarios, ya que le premiten conocer sin necesidad de tener maximixada la aplicación el estado y/o progreso de cierta operación, además que nuestras aplicaciones dejan de lado la tipica ventana gris y el icono estático de siempre aprovechando las nuevas características de windows 7 creando mejores interfaces de usuario, mas amigables y mucho mas llamativas.

La interfaz que debemos pintar será algo asi (durante estos post ire completando el ejemplo del post anterior):

En la primera parte listamos los diferentes estilos que podemos usar, los cuales pertenecen a una enumerazciíon que tiene los siguientes valores:

  • Error
  • Indeterminate
  • NoProgress
  • Normal
  • Paused

En la segunda parte vamos a ir incrementando el valor de la barra de progreso (0-100) usando el control NumericUpDown con su valor minimo en 0 y el maximo en 100.

Ahora vamos a ver que debemos hacer:

1. Declaramos una enumeracion que contiene los diferentes “estilos” de barra,

Private Enum TipoBarra
Ninguna
Indeterminado
Normal
Pausado
Eror
End Enum

2. Declaramos una método que recibe como parámetro el estilo de barra escogida, y la setea a la instancia del TaskbarManager. Al igual que en el primer ejemplo validamos que el sistema operativo pueda utilizar esta caracteristica.

Private Sub EstableceBarra(ByVal oTipoBarra As TipoBarra)
If ValidaSO() Then
Select Case CInt(oTipoBarra)
Case 0
oIconTaskbar.SetProgressState(TaskbarProgressBarState.NoProgress)
Case 1
oIconTaskbar.SetProgressState(TaskbarProgressBarState.Indeterminate)
Case 2
oIconTaskbar.SetProgressState(TaskbarProgressBarState.Normal)
oIconTaskbar.SetProgressValue(NumericUpDownValor.Value, 100)
Case 3
oIconTaskbar.SetProgressState(TaskbarProgressBarState.Paused)
oIconTaskbar.SetProgressValue(NumericUpDownValor.Value, 100)
Case 4
oIconTaskbar.SetProgressState(TaskbarProgressBarState.Error)
oIconTaskbar.SetProgressValue(NumericUpDownValor.Value, 100)
End Select
Else
MsgBox(“Su sistema operativo no permite ejecutar las nuevas caracterisiticas de Windows 7, por favor actulize su sistema.”, MsgBoxStyle.Information, “Sistema no soportado”)
End If
End Sub

3. Al cambiar la selección del radiobutton llamamos la función:

Call EstableceBarra(oTipoBarra:=TipoBarra.Indeterminado)

En este caso se ha seleccionado indeterminado, es decir sera una barra continua e infinita.

4.Al cambiar el valor del NumericUpDownValor modificamos el valor de la barra, simplemente le mandamos el valor del control y le decimos que el máximo valor de la barra será de 100.

Private Sub NumericUpDownValor_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDownValor.ValueChanged
Call ValorBarra(iValor:=NumericUpDownValor.Value)
End Sub
Private Sub ValorBarra(ByVal iValor As Integer)
oIconTaskbar.SetProgressValue(iValor, 100)
End Sub

5. Ahora lo que vamos a hacer es a realizar algunas operaciones q ir mostrando el avance de la operación, al comienzo la barra será roja, luego amarrilla y despues del 80% será verde, asi el usuario sabrá en que estado se encuentran las operaciones.Para el ejemplo he usado un ciclo de 1 hasta 100 pero como saben esto se ejecutarpa demasiado rápido y no podremos ver el ejemplo, en ese caso en cada ciclo he colocado un sleep de la clase Thread el cual por el momento solo diré que “pone a dormir” al servidor durante un tiempo determinado (el tiempo se define en milisegundos), para el ejemplo serán 150.

Private Sub ButtonAutomatico_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAutomatico.Click
If ValidaSO() Then
oIconTaskbar.SetProgressState(TaskbarProgressBarState.Paused)
oIconTaskbar.SetProgressValue(0, 100)
For i As Integer = 1 To 100
oIconTaskbar.SetProgressValue(i, 100)
Thread.Sleep(150)
If i > 40 Then
oIconTaskbar.SetProgressState(TaskbarProgressBarState.Paused)
End If
If i > 80 Then
oIconTaskbar.SetProgressState(TaskbarProgressBarState.Normal)
End If
Next
Else
MsgBox(“Su sistema operativo no permite ejecutar las nuevas caracterisiticas de Windows 7, por favor actulize su sistema.”, MsgBoxStyle.Information, “Sistema no soportado”)
End If
End Sub

Y eso es todo, ahora podremos usar barras de progreso y así evitar que el usuario este constatemente “abriendo” nuestra aplicación para ver el progreso de alguna operación.

Ojala les sea bastante util este pequeño ejemplo.. seguiremos hablando de windows 7 en algunas entradas más..

Link del ejemplo !!

Usando overlay icons en Windows 7

Posted on Actualizado enn

Bueno, a pesar que ya salio hace bastante tiempo windows 7 el cual en lo personal me parece excelente (uso la version ultimate de 32 bits), me gusta su interfaz, las nuevas funcionalidades, lo gran usabilidad que tiene y sobretodo que todas esas caracteristicas que hacen de windows 7 un muy buen sistema operativo las podemso utilizar en nuestros desarrollos.

Asi que hare algunos post mostrando como poder utilizar el API para acceder a todas estas funcionalidades.. no voy a entran en detalles teoricos sobre el modelo de seguridad, y demás que debemos conocer para poder desarrollar aplicaciones compatibles con windows 7, ya que existe bastante y excelente información del tema…asi que voy a ir al grano, mostrar como se hace además por el poco tiempo que me queda.

Para los ejemplos vamos a necesitar un windows 7, y el API/ librerias que nos proveeran todo el acceso a las funcionalidades, de aqui lo puedes bajar !! alli tenemos la documentación, las dll necesarias y toda la documentación.

En este primer post vamos a mirar como podemos usar iconos sobrepuestos sobre el icono principal de nuestra aplicación para que así el usuario sepa el estado de la aplicación.

Ahora  a trabajar !!

Vamos a crear un nuevo proyecto de tipo windows.. para WPF y Windows Form funciona de la misma manera, lo hare en windows form porque luego quiero comenzar a realizar algunos post sobre como podemos trabajar con WPF…

Lo primero que debemos hacer es agregar la referencia a dos librerias:

  • Microsoft.WindowsAPICodePack.dll
  • Microsoft.WindowsAPICodePack.Shell.dll

Ahora vamos a ir agregando algunos elementos de interfaz a nuestro formulario, arrastermos un group, y dentro de él un boton con una caja de texto, este cumplira la funcion de informar al usuario si el sistema operativo soporta el taskbar, ahora en el codebehind importamos dos namespaces:

  • Microsoft.WindowsAPICodePack
  • Microsoft.WindowsAPICodePack.Taskbar

y para verificar si el sistema operativo soporta el API es tan fácil usando la clase TaskbarManger: If TaskbarManager.IsPlatformSupported Then y el método retorna true en caso de tener un SO correcto.

…hasta el momento nuestra aplicación se verá asi:

Bueno ahora vamos a ver como podemos colocar iconos sobrepuestos…

1. Agregamos algunas imagens de tipo icon a los recursos del proyecto.

2. Declaramos una enumeracion para listar los posibles tipos de iconos a usar

Private Enum TipoIcono
Ok
Help
Msn
End Enum

3. Obtenemos la instancia del taskbar

Private oIconTaskbar As TaskbarManager = TaskbarManager.Instance

4. Se crea el metodo que recibe como parametro la enumeración para establecer el icono.

Private Sub EstableceIcono(ByVal oIcono As TipoIcono)
Select Case CInt(oIcono)
Case 0:oIconTaskbar.SetOverlayIcon(My.Resources.ok, “AppOk”)
Case 1:oIconTaskbar.SetOverlayIcon(My.Resources.help, “AppHelp”)
Case 2:oIconTaskbar.SetOverlayIcon(My.Resources.msn, “AppHelp”)
End Select
End Sub

5. Desde el click de cada botón llamamos el método del paso anterior.

Private Sub ButtonIconOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonIconOk.Click
Call EstableceIcono(oIcono:=TipoIcono.Ok)
End Sub

Y listo…ya podemos usar los iconos cobrepuestos en el taskbar de windows 7… asi lucira el icono:

Espero les sea de utilidad…nos vempos en un proximo post donde veremos otra funcionalidad de windows 7 y como poder usarla de una manera fácil…

Descarga del ejemplo !!

Icono de notificación en Windows Form

Posted on Actualizado enn

Hola, muchas veces deseamos darle una mayor profesionalidad a nuestras aplicaciones, por ejemplo, implementar las nuevas funcionalidades de Windows 7, realizar una excelente interfaz con WPF, etc.

Sin embargo, una buena opción es realizar una aplicación la cual disponga de un icono de notificación al estilo de Windows Live Messenger o alguno de nuestros antivirus, y aunque este proceso es realmente sencillo, es raro que sea utilizado.. así que voy a mostrarles como poder usar un icono de notificación de una manera sencilla y bonita…

Lo primero es crear un proyecto de aplicación windows, le damos un nombre y lo primero que vamos a ver es un windows form en blanco, para el ejemplo vamos a usar este formulario.

A este formulario vamos a cambiarle los valores de algunas propiedades las cuales son:

Text: Icono de notificación
StartPosition: CenterScreen || Con esta propiedad lo que hacemos es que el formulario siempre se cargará en la parte central de la pantalla.
AutoSizeMode: GrowAndShirink || Con este valor lo que hacemos es bloquear la posibilidad de redimensionar el formulario.
Opacity: 75% || Hacemos el formulario medio transparente.
MinimizeBox: False || Quitamos el boton de minimizar.
MaximizeBox: False || Quitamos el boton de maximizar.
Icon: Aca vamos a establecer el icono que deseamos tenga el formulario en la barra de titulo.

Ahora vamos a agregar un par de controles al formulario para que no se vea vacio, así que nuestro formulario debe verse algo así:

Hasta ahora un formulario normal, ahora vamos a nuestro toolbox y agregamos un objeto de tipo NotifyIcon…

En este caso, cuando agregamos un objeto de tipo NotifyIcon, el cual se conoce como componente este no es visualizado sobre la superficie del formulario, al contrario lo vemos debajo del formulario, y allí es donde podremos ver todos los componentes (objetos que no son dibujados sobre la interfaz del formulario) como los cuadros de diálogo y en nuestro caso el NotifyIcon.

Para el notifyicon, en la propiedad icon establecesmo el icono que deseamos usar, y en la propiedad text el texto que se va a mostrar cuando el mouse este sobre el icono.

Sin embargo, hasta el momento nuestro icono de notificación no hace nada, ahora vamos a configurarle un menu contextual que debe aparecer cuando se de click derecho sobre el icono, para este efecto agregamos un objeto de tipo ContextMenuStrip, el cual se debe visualizar en la parte inferior del formulario.

Cuando seleccionamos el ContextMenuStrip, en la parte superior izquierda del formulario podemos ver nuestro menu, alli definimos las diferentes opciones que tendrá el menu.

Ahora para que nuestro menu sea diferente a lo que estamos aconstumbrados, en la propiedad BackgroundImage del contextmenustrip seleccionamos una imagen para el fondo del menu.

Por último en la propiedad ContextMenuStrip del NotifyIcon seleccionamos el contextmenustrip que hemos acabo de crear… y listo ya tenemos un bonito icono de notificación.

En la imagen podemos ver como se muestra el icono definido y el menu que hemos creado.

Espero que les sea de utilidad.

Descargar ejemplo !!

Leer pdf desde windows form

Posted on Actualizado enn

Hola a todos, bueno hoy quiero mostrarles como de una manera rápida podemos tener un lector de archivos pdf en nuestra aplicación windows, asi no necesitamos tener que lanzar un acrobat reader o algo parecido.

Bien, lo que vamos a hacer es acceder al componente COM del adobe reader y asi crear una instancia de el en nuestra aplicación…

Bueno manos a la obra, lo primero será crear un nuevo proyecto de tipo windows, asi el visual no generá un formulario por defecto… vamos a trabajar con este formulario, si desean pueden setear las propiedas como el tamaño, el título y demás características que deseen.

Ahora lo que vamos a hacer es en nuestro toolbox damos click derecho y luego seleccionamos elegir elementos…o en choose items si lo tienen en inglés…

luego se abrirá una ventana en la cual disponemos de varias pestañas, pero en este casp la que nos interesa en al pestaña que dice componentes COM (COM Components), y alli seleccionamos Adobe PDF Reader…

al seleccionar este componenete y dar clic en ok, debe aparecer en nuestro toolbox un objeto llamado Adobe Pdf Reader…

ahora solo debemos arrastrar nuestro nuevo objeto al formulario. Ahora lo que haremos sera darle la opción al usuario qiue pueda buscar un archivo y este sea cargado en el formulario, asi que ya han visto la interfaz (básica) que he diseñado, lo que voy a explicar será el code behind… como siempre en vb..

Primero instanciamos un nuevo objeto de tipo OpenFileDialog, este objeto nos permite hacer una búsqueda de archivos en nuestro equipo:

Dim oOpenFileDialog As New OpenFileDialog

Ahora en el load del formulario, vamos a limitar los tipos de archivo que podemos buscar estableciendo un valor para la propiedad filter de nuestro cuadro de diálogo, basicamente establecemos un nombre y le asociamos una extensión, en este caso .pdf:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
oOpenFileDialog.Filter = “Archivos PDF (*.pdf) | *.pdf”
End Sub

Ahora en el boton de buscar archivo, lo que hacemos es establecer la propiedad filtername a vacio, abrir el cuadro de diálogo y si el usuario selecciona archivo y presiona ok entonces mostrar la ruta del archivo en el cuadro de texto:

Private Sub ButtonArchivo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonArchivo.Click
oOpenFileDialog.FileName = String.Empty
If oOpenFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
TextBoxFile.Text = oOpenFileDialog.FileName
End If
End Sub

Bueno, ahora que ya tenemos la ruta del archivo, por fin vamos a cargar el archivo pdf en el formulario, lo único que debemos hacer el al componente COM asignarle el archivo pdf con la función LoadFile, la cual retorna un true si el cargue ha sido exitoso y false en caso contrario, en esta caso simplemente mostramos un mensaje informando si ocurrio un error o si no:

Private Sub ButtonCargar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCargar.Click
If ComPDF.LoadFile(TextBoxFile.Text) Then
MsgBox(“Archivo cargado con éxito”, MsgBoxStyle.Information, “Sistema”)
Else
MsgBox(“Ocurrió un error al cargar el archivo”, MsgBoxStyle.Information, “Sistema”)
End If
End Sub

Bueno y eso es todo, ya podemos ver nuestros pdf sin salir de nuestra aplicación.

Descarga el código de ejemplo !!

Nos vemos proximamente…