Echa un vistazo a tu barra de tareas. ¿Ves el área donde se encuentra la hora? ¿Hay otros íconos allí? El lugar se llama la bandeja del sistema de Windows. ¿Desea colocar el icono de su aplicación Delphi allí? ¿Desea que ese ícono sea animado o que refleje el estado de su aplicación??
Esto sería útil para los programas que se dejan en ejecución durante largos períodos de tiempo sin interacción del usuario (tareas en segundo plano que normalmente se siguen ejecutando en su PC durante todo el día).
Lo que puede hacer es hacer que sus aplicaciones Delphi se vean como si estuvieran minimizando en la Bandeja (en lugar de en la Barra de tareas, directamente en el botón Win Start) colocando un icono en la bandeja y simultáneamente haciendo que sus formularios sean invisibles.
Afortunadamente, crear una aplicación que se ejecute en la bandeja del sistema es bastante fácil: solo se necesita una función (API), Shell_NotifyIcon, para realizar la tarea.
La función se define en la unidad ShellAPI y requiere dos parámetros. El primero es un indicador que indica si el icono se está agregando, modificando o eliminando, y el segundo es un puntero a una estructura TNotifyIconData que contiene la información sobre el icono. Eso incluye el identificador del icono para mostrar, el texto para mostrar como información sobre herramientas cuando el mouse está sobre el ícono, el identificador de la ventana que recibirá los mensajes del ícono y el tipo de mensaje que el ícono enviará a esta ventana.
Primero, en la sección Privada de su formulario principal ponga la línea:
TrayIconData: TNotifyIconData;
tipo
TMainForm = clase(TForm)
procedimiento FormCreate (remitente: TObject);
privado
TrayIconData: TNotifyIconData;
Declaraciones privadaspúblicoDeclaraciones públicasfinal;
Luego, en el método OnCreate de su formulario principal, inicialice la estructura de datos TrayIconData y llame a la función Shell_NotifyIcon:
con TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Manija;
ID de usuario: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Application.Icon.Handle;
StrPCopy (szTip, Application.Title);
final;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);
El parámetro Wnd de la estructura TrayIconData apunta a la ventana que recibe mensajes de notificación asociados con un icono.
El icono indica el ícono que queremos agregar a la bandeja; en este caso, se usa el ícono principal de Aplicaciones.
El szTip contiene el texto de información sobre herramientas para mostrar para el icono, en nuestro caso, el título de la aplicación. El szTip puede contener hasta 64 caracteres..
El parámetro uFlags está configurado para indicarle al icono que procese los mensajes de la aplicación, use el icono de la aplicación y su punta. UCallbackMessage apunta al identificador de mensaje definido por la aplicación. El sistema utiliza el identificador especificado para los mensajes de notificación que envía a la ventana identificada por Wnd cada vez que se produce un evento de mouse en el rectángulo delimitador del icono. Este parámetro se establece en la constante WM_ICONTRAY definida en la sección de interfaz de la unidad de formularios y es igual a: WM_USER + 1;
Agregue el icono a la Bandeja llamando a la función API Shell_NotifyIcon. El primer parámetro "NIM_ADD" agrega un icono al área de la bandeja. Los otros dos valores posibles, NIM_DELETE y NIM_MODIFY se usan para eliminar o modificar un ícono en la Bandeja; veremos cómo más adelante en este artículo. El segundo parámetro que enviamos a Shell_NotifyIcon es la estructura inicializada de TrayIconData.
Si ejecuta su proyecto ahora, verá un icono cerca del reloj en la bandeja. Note tres cosas.
1) Primero, no sucede nada cuando hace clic (o hace cualquier otra cosa con el mouse) en el icono colocado en la Bandeja; todavía no hemos creado un procedimiento (controlador de mensajes).
2) Segundo, hay un botón en la barra de tareas (obviamente no lo queremos allí).
3) Tercero, cuando cierra su aplicación, el icono permanece en la Bandeja.
Solucionemos esto al revés. Para eliminar el icono de la bandeja cuando salga de la aplicación, debe llamar nuevamente al Shell_NotifyIcon, pero con el NIM_DELETE como primer parámetro. Hace esto en el controlador de eventos OnDestroy para el formulario Principal.