Welcome to Kartones.Net Sign in

NetCódigo e Internet

El conocimiento es un bien que crece a medida que se comparte

July 2008 - Posts

Software de virtualización de Sun. VirtualBox
VirtualBox Sun ha desarrollado un software para virtualizar sistemas, lo han llamado VirtualBox. Por supuesto, siguiendo la filosofía de la empresa es open source y por supuesto multiplataforma. Se puede ejecutar en Windows, Linux, Macintosh (aún en beta), Solaris y soporta también una gran variedad de sistemas invitados como Windows (NT 4.0, 2000, XP, Server 2003, Vista), DOS/Windows 3.x, Linux (2.4 and 2.6), y OpenBSD.

VirtualBox VirtualBox

Para estar informado del producto visitar el blog.
Para descargar aquí.
Para documentación aquí.

Posted: Jul 23 2008, 01:00 PM by fsancab | with no comments
Filed under:
IconTray con WPF
En este post veremos como conseguir que, al minimizar una aplicación WPF, en vez de mostrarse en el área de aplicaciones minimizadas se muestre en el área de la bandeja de iconos. Realmente es muy sencillo pero en WPF no existe un control específico para ello, con lo que tenemos que volver a utilizar la interorperabilidad con Windows Forms.

IconTray

Para ello lo primero que debemos hacer es agregar las referencias System.Windows.Forms y System.Drawning. La segunda la utilizaremos para especificar el icono que queremos mostrar en la barra de iconos.

IconTray

Aquí paso a paso el código. El proceso sería: 1. Declaramos a nivel principal una variable del tipo NotifyIcon.
Class Window1 Dim _TrayIcon As New System.Windows.Forms.NotifyIcon
2. En el evento de inicialización del formulario asignamos las propiedades al objeto NotifyIcon. Además crearemos un disparador para el evento Click del Notify.
Private Sub Window1_Initialized(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Initialized ' CREA ICONTRAY _TrayIcon.BalloonTipText = "Aplicación minimizada. Click aquí para restaurar" _TrayIcon.BalloonTipTitle = "Título Tray" _TrayIcon.Text = "texto" _TrayIcon.Icon = New System.Drawing.Icon("Resources\Application.ico") AddHandler _TrayIcon.Click, AddressOf _TrayIcon_Click End Sub
3. Capturamos el evento Minimizar del formulario y mostramos el NotifyIcon.
Private Sub Window1_StateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.StateChanged If Me.WindowState = Windows.WindowState.Minimized Then ' SI SE MINIMIZA EL FORM LO OCULTA Y MUESTRA ICONTRAY Me.Hide() _TrayIcon.Visible = True _TrayIcon.ShowBalloonTip(2000) End If End Sub
4. Capturamos el evento Click del NotifyIcon para que al producirse restaure la aplicación.
Private Sub _TrayIcon_Click(ByVal sender As Object, ByVal e As System.EventArgs) ' AL HACER CLICK EN ICONTRAY RESTAURA Y MUESTRA FORM _TrayIcon.Visible = False Me.Show() Me.WindowState = Windows.WindowState.Normal End Sub End Class
5. Al cerrar el formualario destruimos el objeto NotifyIcon.
Private Sub Window1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.Closing ' AL CERRAR FORM LIBERA RECURSOS DEL ICONTRAY _TrayIcon.Dispose() _TrayIcon = Nothing End Sub
Con esto conseguimos el mismo funcionamiento en WPF del NotifyIcon del espacio de nombres System.Windows.Forms.
Averiguar formularios abiertos

Esto va a ser un minipost, porque averiguar qué formularios tenemos abiertos en una aplicación es tan fácil como usar la clase System.Windows.Forms.Application.OpenForms, devuelve una colección de tipo Form con los formularios abiertos. Haciendo un bucle como el del ejemplo podremos manipularlos.

Dim _Form As Form

For Each _Form In System.Windows.Forms.Application.OpenForms

...

Next

Evitar descuido debug=true
¿No te ha pasado alguna vez publicar un sitio web con el debug a true o las trazas habilitadas? Es un tipico descuido que se da al subir aplicaciones a un servidor en producción. Evidentemente, a la hora de desarrollar es lógico tener las trazas habilitadas o el debuger habilitado. Lo que no es nada saludable es dejarlos activados en producción. ¿Qué diferencias hay entre tener esto habilitado o no?
  1. La compilación de las páginas toma más tiempo.
  2. El código se ejecuta de forma más lenta.
  3. Se necesita más memoria en tiempo de ejecución.
  4. Los scripts y las imágenes no se cachean.
Si quieren más información al respecto, visitar este artículo de Scott Guthrie. Pero al grano, cómo evitar estos descuidos. La solución la tenemos en la configuración del servidor de producción. Concretamente en el elemento deployment. Para ello modificaremo el fichero machine.config, recordar que es el del servidor de producción. Introduciremos el siguiente código, dentro del elemento configuración y system.web:
<configuration>
  <system.web>
     <deployment retail=”true”/>
  </system.web>
</configuration>
Con esto conseguiremos que la configuración del servidor prevalezca a la de la aplicación en cuanto a cómo se ejecuta la misma. En este caso, el deployment retail en true indicará que todas las aplicaciones están en modo producción. Por mi experiencia les aconsejo que usen este simple código para evitar quejas de los clientes o usuarios finales.