Aplicación de bandeja del sistema Delphi

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. ¿Te gustaría colocar tu Delphi icono de la aplicación allí? ¿Le gustaría que ese icono se animara o que reflejara el estado de su aplicación?

Esto sería útil para programas que se dejan en funcionamiento 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 Barra de tareas, directamente al botón Win Start) colocando un ícono en la bandeja y haciendo simultáneamente su (s) formulario (s) invisible.

Vamos a la bandeja

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 el Unidad ShellAPI

instagram viewer
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 icono, el manejador de la ventana que recibirá los mensajes del icono y el tipo de mensaje que el icono enviará a este 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 privadas}público{Declaraciones públicas}final;

Luego, en su formulario principal OnCreate, 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: = Aplicación. Icono. Encargarse de;
StrPCopy (szTip, Aplicación. Título);
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 icono que queremos agregar a la bandeja; en este caso, se usa el icono 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. los 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 WM_ICONTRAY constante 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.

Tomar uno

Si ejecuta su proyecto ahora, verá un icono cerca del reloj en la bandeja. Tenga en cuenta tres cosas.

1) Primero, no sucede nada cuando hace clic (o hace cualquier otra cosa con el mouse) en el icono ubicado en la Bandeja; todavía no hemos creado un procedimiento (controlador de mensajes).
2) En segundo lugar, 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.

Toma dos

Solucionemos esto al revés. Para que el icono se elimine de la bandeja cuando salga de la aplicación, debe volver a llamar a Shell_NotifyIcon, pero con NIM_DELETE como primer parámetro. Haces esto en OnDestroy controlador de eventos para el formulario principal.

procedimiento TMainForm. FormDestroy (remitente: TObject);
empezar
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
final;

Para ocultar la aplicación (botón de la aplicación) de la barra de tareas, utilizaremos un simple truco. En el código fuente de Proyectos, agregue la siguiente línea: Aplicación. ShowMainForm: = False; antes de la solicitud. CreateForm (TMainForm, MainForm); Por ejemplo, deja que se vea así:

...
empezar
Solicitud. Inicializar;
Solicitud. ShowMainForm: = False;
Solicitud. CreateForm (TMainForm, MainForm);
Solicitud. Correr;
final.

Y finalmente, para que nuestro icono de la Bandeja responda a los eventos del mouse, necesitamos crear un procedimiento de manejo de mensajes. Primero, declaramos un procedimiento de manejo de mensajes en la parte pública de la declaración del formulario: procedure TrayMessage (var Msg: TMessage); mensaje WM_ICONTRAY; En segundo lugar, la definición de este procedimiento se ve así:

procedimiento TMainForm. TrayMessage (var Msg: TMessage);
comenzar caso Msg.lParam de
WM_LBUTTONDOWN:
empezar
ShowMessage ('Se hizo clic en el botón izquierdo
- ¡MOSTREMOS el formulario! ');
Forma principal. Mostrar;
final;
WM_RBUTTONDOWN:
empezar
ShowMessage ('Se hace clic con el botón derecho
- ¡OCULTEMOS el formulario! ');
Forma principal. Esconder;
final;
final;
final;

Este procedimiento está diseñado para manejar solo nuestro mensaje, el WM_ICONTRAY. Toma el valor de LParam de la estructura del mensaje que puede darnos el estado del mouse luego de la activación del procedimiento. Por simplicidad, manejaremos solo el mouse izquierdo hacia abajo (WM_LBUTTONDOWN) y el mouse derecho hacia abajo (WM_RBUTTONDOWN). Cuando el botón izquierdo del mouse está sobre el ícono, mostramos el formulario principal, cuando se presiona el botón derecho, lo ocultamos. Por supuesto, hay otros mensajes de entrada del mouse que puede manejar en el procedimiento, como botón arriba, botón doble clic, etc.

Eso es. Rapido y Facil. A continuación, verá cómo animar el icono en la Bandeja y cómo hacer que ese icono refleje el estado de su aplicación. Aún más, verá cómo mostrar un menú emergente cerca del icono.

instagram story viewer