Aplicaciones en la SysTray (1)

Colocar aplicaciones en la barra de tareas del Windows (más conocida como la SysTray) puede llegar a ser muy útil y muy conveniente.

Captura 1. La barra de tareas (SysTray) del Windows

Podemos usarla para que nuestra aplicación esté siempre activa, sin importar lo que haga el usuario, de esa manera podríamos hacer backups automáticos, verificaciones, descargas de archivos desde Internet, envíos de e-mails, avisarle que ocurrió algo que requiere de su atención, y un largo etcétera.

Y con Visual FoxPro es extremadamente fácil conseguir que nuestros programas se ubiquen allí. Quienes no lo saben, suponen que es algo muy difícil, pero no, es súper sencillo de lograr.

Lo que necesitaremos es una biblioteca de clases llamada SYSTRAY.VCX que viene incluida con el Visual FoxPro. La encontrarás en la carpeta:

C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Solution\Toledo\

Y lo mejor, es que en esa misma carpeta encontrarás un formulario de ejemplo. Mirando ese formulario podrás leer casi todo lo que necesitarás saber. El nombre del formulario es:

systray_sample.scx

Creando una aplicación que se ubicará en la barra de tareas del Windows

Hay dos formas de usar a la biblioteca de clases SYSTRAY.VCX:

  1. En un programa (.PRG)
  2. En un formulario (.SCX)

Si la queremos usar en un .PRG entonces crearemos un objeto con la función CREATEOBJECT(), en cambio si la queremos usar en un formulario insertaremos un control systray en nuestro formulario.

Entendiendo como funciona el menú en la barra de tareas del Windows

Lo que colocamos en la barra de tareas del Windows es un menú. No es un programa ni un formulario, sino un menú. O sea que en tu formulario podrías tener todos los controles que quieras, pero ninguno de ellos se verá en el menú.

¿Y por qué usar un formulario para colocar al menú en la barra de tareas?

A veces es cuestión de gustos y a veces puede facilitarte tu trabajo, porque tienes en el formulario propiedades o métodos que necesitarás. Pero lo importante a recordar es que puedes usar indistintamente un archivo .PRG o un formulario, ya que con cualquiera de ellos funcionará.

Estableciendo los valores de las propiedades:

Después que creamos el objeto en nuestro archivo .PRG o en nuestro formulario, hay 4 propiedades cuyos valores debemos establecer para que nuestra aplicación se ubique en la barra de tareas del Windows, las 4 propiedades son obligatorias:

  • IconFile
  • MenuText
  • MenuTextIsMPR
  • TipText

IconFile es el nombre de un archivo gráfico de icono. Es el icono que el usuario verá en la barra de tareas.

MenuText puede ser un string conteniendo las opciones o el nombre de un archivo .MPR

MenuTextIsMPR indica si MenuText es un string o si es un archivo .MPR

TipText es el mensaje que verá el usuario cuando mueva su cursor sobre el icono

Listado 1. Un ejemplo donde se establecen esas 4 propiedades:

IconFile      = "MI_ICONO_TAREAS_1.ICO"
MenuText      = "1;Bloc de Notas;2;Calculadora;3;Paint;4;Mensaje;5;Procedure;6;Salir"
MenuTextIsMPR = .F.
TipText       = "Ejemplo de un programa en la barra de tareas del Windows"

Captura 2. Al colocar el mouse sobre el icono, se muestra un texto de ayuda

En la propiedad IconFile se escribió el nombre de un archivo de icono; en la propiedad MenuText se escribieron las opciones que estarán visibles para el usuario, en todos los casos es: un número, seguido de un punto y coma, seguido de un texto, y finalizado con un punto y coma. Los números pueden ser cualesquiera, el Visual FoxPro los usa para identificar a las opciones. En este ejemplo, se usaron los números 1, 2, 3, 4, 5, y 6, pero tú puedes usar cualquier número que se te ocurra. Como las opciones que verá el usuario se escribieron en la propiedad MenuText y no en un archivo .MPR entonces en la propiedad MenuTextIsMPR se colocó .F., y finalmente en la propiedad TipText se escribió el texto que ve el usuario cuando coloca su mouse sobre el icono, tal y como se puede ver en la Captura 2. (El icono de este ejemplo es un ojo)

Mostrando a nuestra aplicación en la barra de tareas del Windows

Captura 3. El menú que ve el usuario cuando hace clic en el icono

Especificando un archivo .MPR que contiene las opciones del menú

En el Listado 1. las opciones se escribieron directamente en un string, pero también podemos escribir las opciones en un archivo .MPR si queremos, y quizás te preguntarás ¿para qué haríamos eso? la respuesta es que en ese caso tu menú podría tener distintos colores y tipos de letras y tamaños de letras y por lo tanto sería más vistoso, llamaría más la atención del usuario.

Captura 4. Un menú con varios colores en las opciones

En la Captura 4. vemos un menú cuyas opciones se muestran en distintos colores. En general no es buena idea exagerar con eso, pero se muestra ahí para que veas algunas de tus posibilidades.

Captura 5. Un menú con colores, pero más sobrio que el anterior

Si comparas la Captura 3., con la Captura 4., y la Captura 5., notarás que tienen varias diferencias: distintos tipos de letras, distintos tamaños de letras, distintos colores.

Es por ese motivo que muchos programadores preferimos usar un archivo .MPR para mostrar las opciones del menú, ya que nos permite ser más creativos. El menú de la Captura 3. parece muy aburrido. Aunque sobre gustos…

¿Cómo ejecutamos la opción que eligió el usuario?

Ya le hemos mostrado al usuario cuales son sus opciones disponibles, él hizo clic sobre una de esas opciones, ¿cómo la ejecutamos?

Bien, eso depende de si su menú está en un archivo .MPR o no lo está. Si no está en un archivo .MPR entonces en el procedure ProcessMenuEvent()  de nuestro objeto systray colocamos los comandos. Algo así:

Listado 2. Ejecutando la opción elegida, cuando no se usa un archivo .MPR

PROCEDURE ProcessMenuEvent     && Aquí se debe procesar la opción elegida por el usuario
LPARAMETERS tnMenuItemID

  DO CASE
    CASE tnMenuItemID = 0     && Salió sin elegir opción, nada se debe hacer entonces
    CASE tnMenuItemID = 1     && Eligió la primera opción
      =ShellExecute(0, "OPEN", "NOTEPAD.EXE", "", "", 1)
    CASE tnMenuItemID = 2     && Eligió la segunda opción
      =ShellExecute(0, "OPEN", "CALC.EXE", "", "", 1)
    CASE tnMenuItemID = 3     && Eligió la tercera opción
      =ShellExecute(0, "OPEN", "MSPAINT.EXE", "", "", 1)
    CASE tnMenuItemID = 4     && Eligió la cuarta opción
      =MessageBox("Un mensaje de bienvenida")
    CASE tnMenuItemID = 5     && Eligió la quinta opción
      DO MI_PROCEDURE_SALUDA
    CASE tnMenuItemID = 6     && Eligió la sexta opción
      This.RemoveIconFromSystray()
      CLEAR EVENTS
    ENDCASE

ENDPROC
*
*

Los números que se encuentran después de la variable tnMenuItemID deben coincidir con los números que escribimos en la propiedad MenuText. Si el valor de la variable tnMenuItemID es cero, eso significa que el usuario salió sin elegir alguna de las opciones.

IMPORTANTE: Para que se termine el procesamiento, se debe escribir el comando CLEAR EVENTS

Como puedes ver, nada hay de raro en el Listado 2., ya que se trata de un simple procedure con una construcción CASE…ENDCASE dentro suyo. Lo único realmente importante que debes recordar es que si quieres darle al usuario la opción de terminar tu aplicación, debes escribir el comando CLEAR EVENTS en alguna de las opciones.

Descarga:

Para que todo lo visto hasta aquí te quede más claro y lo puedas ver funcionando en la vida real, puedes descargar un archivo .ZIP que contiene todo lo que necesitas para mostrar una aplicación en la barra de tareas del Windows cuando no se usa un archivo .MPR y en el siguiente artículo tendrás la posibilidad de descargar un archivo .ZIP que te mostrará como hacer cuando  quieres usar un archivo .MPR

https://www.mediafire.com/file/zx0lidv48koqj2r/SYSTRAY_1.ZIP/file

Conclusión:

Algo que no es muy frecuente que hagan los programadores de Visual FoxPro pero que sin dudas es muy útil es colocar aplicaciones en la barra de tareas del Windows. Quizás una de las razones es que desconocen como hacerlo o piensan que es algo muy difícil y complicado. En realidad, es muy fácil.

En este artículo solamente hemos visto una pincelada de lo que se puede lograr, en siguientes artículos profundizaremos más con este interesante tema.

Artículos relacionados:

Entendiendo a ShellExecute

Aplicaciones en la SysTray (2)

Aplicaciones en la SysTray (3)

Aplicaciones en la SysTray (4)

El índice del blog VFPavanzado

 

6 comentarios en “Aplicaciones en la SysTray (1)

  1. Excelente articulo, me sirvio de mucho amigo, necesitaba ejecutar un servicio rutinario y esta fue la mejor opción que pude obtener. Agradecido.

  2. Hola Walter, saludos x anticipado he estado usando y adaptando este ejemplo, pero se me esta presentando 1 problema, el menu se muestra x debajo d la barra ocultando mis opciones d menu para q el usuario seleccione y no sobre puesto como es normal en cualquie programa q este en la barra

Deja un comentario