« »

Mono, C# y los iconos en la bandeja del sistema

February
14
member
sucotronic

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 :P) 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


date Posted on: Thursday, February 14, 2008 at 0:35 am
Category 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.



12 Respuestas to “Mono, C# y los iconos en la bandeja del sistema”

  1. Pablo

    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 pm
     
  2. sucotronic

    Sin problema. Cuanta a más gente sirva mejor :D

    [Responder]

    February 26th, 2008 at 23:55 pm
     
  3. giancarlo

    Hello,

    this work with GTK 2.12.0, but not anymore with GTK 2.8

    [Responder]

    April 16th, 2009 at 13:52 pm
     
  4. sucotronic

    giancarlo -> 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
     
  5. Carlos Daniel Guillen Soto

    Disculpa, pero tengo una duda muy grande, quisiera saver como le hago, para que al darle click a un boton, otra ventana (GTK.Window) se haga visible, Estoy utilizando El Asistente para crear las aplicaciones localmente (Using ProyectoGTK (que es el namespace en el que tengo las clases), es en lo que me estoy atorando, tengo mas o menos la idea de como hacerlo, pero necesita ser en la misma classe, y, por codigo (Sin el asistente para dibujar los Forms), si pudieras mandarme un Ejemplo de Monodevelop (uso linux) en el que se pueda hacer que un boton haga visible otro form te agradeceria eternamente

    Grasias desde Torreon Mexico

    [Responder]

    sucotronic Reply:

    @Carlos Daniel Guillen Soto, me gustaría poder ayudarte, pero de mono más bien se poco. Estoy seguro de que en http://www.mono-hispano.org/ podrán ayudarte.

    [Responder]

    August 31st, 2009 at 6:37 am
     
  6. animelafuerza

    Buenas tardes, quisiera saver si ahi algun lugar donde pueda contribuir un poco con ejemplos en el uso de GTK#, soy nuevo en esto pero ya empiezo a garrarle un poco loa onda en cuando a algunas cosas, e, igualmente quisiera plantear algunas dudas que tengo xD

    Saludos
    E-Mail: animelafuerza@hotmail.com

    [Responder]

    September 10th, 2009 at 17:47 pm
     
  7. mic

    Carlos Daniel Guillen Soto

    Disculpa, pero tengo una duda muy grande, quisiera saver como le hago, para que al darle click a un boton, otra ventana (GTK.Window) se haga visible

    si tienes un namespace sopia{} en tu proyecto por decirlo asi solo seria

    en el evento del boton poner

    Nombre_de_la_ventana win = new Nombre_de_la_ventana();
    win.show();

    y listo.

    [Responder]

    sucotronic Reply:

    @mic, me gustaría poder ayudarte, pero mis conocimientos de Mono son bastante limitados y el ejemplo del artículo y poco más es lo que puedo ofrecerte. De todos modos en la página http://www.go-mono.com estoy seguro de que encontrarás toda la información necesaria.

    [Responder]

    March 9th, 2010 at 7:22 am
     
  8. mic

    yo le daba una respuesta a Guillermo.

    con

    n el evento del boton poner

    Nombre_de_la_ventana win = new Nombre_de_la_ventana();
    win.show();

    el habia prregungado antes.

    [Responder]

    sucotronic Reply:

    @mic, ostras, es verdad, ni me había dado cuenta :P
    la cosa es que juro que no he hecho copy-paste y resulta que ¡¡he escrito lo mismo con un lapso de diferencia de 6 meses!!

    [Responder]

    March 9th, 2010 at 22:47 pm
     
  9. carlos daniel

    Bueno, desde el comentario escrito anteriormente, e alcanzado mis conocimientos en C#, monodevelop, gtk en un grado mas grane, a toda aquella persona que quiera ayuda le dejo mi correo(animelafuerza@hotmail.com)

    Saludos

    [Responder]

    March 11th, 2010 at 2:40 am
     

Escribe un comentario


a trastear un poco is powered by WordPress
Theme is Coded&Designed by Wordpress Themes at ricdes