Mono, C# y los iconos en la bandeja del sistema
No hace mucho me uní a un proyecto open source alojado en sourceforge. Dicho proyecto está escrito en c# y compilado para Mono. La verdad es que nunca había programado nada en dicho lenguaje así que estoy en un periodo de “aprendizaje”.
Una de las primeras cosas que hice en el proyecto fue actualizar el sistema usado para mostrar un icono en la bandeja del sistema. Al buscar información por internet, encontré un ejemplo (han actualizado el ejemplo a petición mía, en base a mi post
) en la documentación de mono, pero que resultó ser el mismo sistema que ya se usaba en la aplicación y que estaba en desuso. En la lista de correo de mono me informaron de que existía una clase llamada StatusIcon, con la que fácilmente se podía crear un icono así que emplee esa finalmente. Y para que algún día pueda ser de utilidad a alguien, hago mi aportación poniendo un ejemplo de un “hola mundo” para mono con icono incluido:
using Gtk;
using Gdk;
using System;
class Hello {
private static StatusIcon trayIcon;
private static Gtk.Window window;
// Método principal de la clase, que se ejecuta al invocar
// la aplicación
static void Main()
{
// Iniciliza Gtk+ para su funcionamiento
Application.Init ();
// Creación de una ventana con título
window = new Gtk.Window ("Hola mundo");
// Asociación del evento delete_event() cuando la ventana es cerrada
window.DeleteEvent += delete_event;
// Carga de la imagen del icono de la bandeja del sistema
Pixbuf iconTray = new Pixbuf ("/tmp/iconoBandeja.png");
// Creación del icono
trayIcon = new StatusIcon(iconTray);
// Activar la visibilidad del icono
trayIcon.Visible = true;
// Asociar al evento de clic sobre el icono el método OnTrayIconClicked
trayIcon.Activate += OnTrayIconClicked;
// Asociar al evento de clic derecho sobre el icono el método OnTrayPopup
trayIcon.PopupMenu += OnTrayIconPopup;
// Poner un tooltip al icono
trayIcon.Tooltip = "icono hola mundo";
// Mostrar la ventana
window.ShowAll ();
// Arranca el bucle principal
Application.Run ();
}
static void OnTrayIconPopup (object o, EventArgs args) // handler for mouse click
{
// Crear menu
Menu popupMenu = new Menu();
// Crea un item en el menú con el texto 'Salir'
ImageMenuItem menuItemQuit = new ImageMenuItem ("Salir");
// Crea una imagen para el item del menu
Gtk.Image appimg = new Gtk.Image(Stock.Quit, IconSize.Menu);
// Asociar la imagen con el item
menuItemQuit.Image = appimg;
// Añadir el item al menu
popupMenu.Add(menuItemQuit);
// Asociar al evento de clic sobre el item el evento OnPopupClick
menuItemQuit.Activated += OnPopupClick;
// Hace visible el menu
popupMenu.ShowAll();
// Muestra el menu
popupMenu.Popup();
}
static void OnPopupClick(object o, EventArgs args)
{
// Termina la aplicación cuando el usuario pulsa el botón Salir
Application.Quit();
}
static void OnTrayIconClicked(object sender, EventArgs a)
{
// Cambia el estado de la ventana de la aplicación entre visible y no visible
if (window.Visible)
{
window.Visible = false;
}
else
{
window.Visible = true;
}
}
static void delete_event (object obj, DeleteEventArgs args)
{
// Termina la aplicación cuando el usuario cierra la ventana
Application.Quit ();
}
}
Para compilar la aplicación:
mcs holaMundoIcono.cs -pkg:gtk-sharp-2.0
Y para ejecutarla:
./holaMundoIcono.exe
Posted on: Thursday, February 14, 2008 at 0:35 am
linux, programación. Puedes seguir las respuestas de esta entrada a traves de l feed RSS 2.0.
Puedes dejar una respuesta, o trackback desde tu propio sitio.









Hola, te importa que publiquemos tu post como un tutorial en el wiki de Mono-Hispano?
La dirección del wiki es la siguiente:
http://www.mono-hispano.org
Enhorabuena por el post
[Responder]
February 26th, 2008 at 22:09 pmSin problema. Cuanta a más gente sirva mejor
[Responder]
February 26th, 2008 at 23:55 pmHello,
this work with GTK 2.12.0, but not anymore with GTK 2.8
[Responder]
April 16th, 2009 at 13:52 pmgiancarlo ->
mmm, I will try to update the code to make it work with latest GTK version. Reading again your comment I noted that you are using an old version of GTK; I can’t help you because I don’t have a development system with such old package version, sorry.[Responder]
April 17th, 2009 at 16:03 pm