Array

Colocación de aplicaciones Delphi en la bandeja del sistema

& lt; img src = «https://www.thoughtco.com/thmb/ldeHWg3xFK4yU_zdDVZdIl-xYWs=/768×0/filters: no_upscale(): max_bytes (15000): strip_c (): format.300w, https: //www.thoughtco.com/thmb/20FowFXpHt-tp0RfSSeOcFlTVcY = / 417×0/filters: no_upscale (): max_bytes (15000): strip_icc (): format

Echa un vistazo a tu barra de tareas. Vea el área donde se encuentra la hora? ¿Hay otros íconos allí?? El lugar se llama la bandeja del sistema de Windows. ¿Desea colocar su aplicación Delphi y el icono de Apos; s allí?? ¿Desea que ese icono esté animado o refleje el estado de su aplicación??

Esto sería útil para los programas que se dejan en funcionamiento durante largos períodos de tiempo sin interacción del usuario (tareas de fondo que normalmente sigue ejecutando en su PC durante todo el día).

Lo que puede hacer es hacer que sus aplicaciones Delphi parezcan minimizadoras de la Bandeja (en lugar de la Barra de tareas, hasta el botón Win Start) colocando un icono en la bandeja y haciendo que sus formularios sean invisibles.

Video destacado

Let & amp; apos; s Tray It

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 & amp; amp; nbsp; una sugerencia de herramienta cuando el mouse está sobre el icono, el identificador de la ventana que recibirá los mensajes del icono y el tipo de mensaje el icono enviará a esta ventana.

Primero, en su forma principal & amp; apos; s La sección privada pone la línea :
& lt; br & gt ;
TrayIconData: TNotifyIconData; & lt; / br & gt ;

& lt; pre & gt; tipo & lt; br & gt ;
TMainForm = clase (TForm) & lt; br & gt ;
procedimiento FormCreate (Enviador: TObject); & lt; br & gt ;
privado & lt; br & gt ;
TrayIconData: TNotifyIconData; & lt; br & gt ;
{Declaraciones privadas} público {Declaraciones públicas} final ; & lt; & gt;

Luego, en su forma principal y en el método OnCreate de Apos; s, inicializa la estructura de datos TrayIconData y llama a la función Shell_NotifyIcon:

& lt; pre & gt; con TrayIconData dobegin & lt; br & gt ;
cb Tamaño: = SizeOf (TrayIconData); & lt; br & gt ;
Wnd: = Manija; & lt; br & gt ;
uID: = 0; & lt; br & gt ;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP; & lt; br & gt ;
uCallbackMessage: = WM_ICONTRAY; & lt; br & gt ;
hIcon: = Application.Icon.Handle; & lt; br & gt ;
StrPCopy (szTip, Application.Title); & lt; br & gt ;
final ; & lt; br & gt ;
Shell_NotifyIcon (NIM_ADD, @TrayIconData); & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & gt; & gt; & gt;

El parámetro Wnd de la estructura TrayIconData apunta a la ventana que recibe mensajes de notificación asociados con un icono.& amp; amp; nbsp;

El icono apunta al icono que queremos agregar a la Bandeja; en este caso, se utiliza el icono principal de Aplicaciones.
& lt; br & gt ;
El szTip contiene el texto Tooltip para mostrar para el icono, en nuestro caso el título de la aplicación. El szTip puede contener hasta 64 caracteres.
& lt; br & gt ;
El parámetro uFlags está configurado para indicar al icono que procese los mensajes de aplicación, use el icono de aplicación y amp; apos; s y su sugerencia. El mensaje uCallback 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 ocurre un evento del 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 e igual a: WM_USER + 1; & lt; / br & gt ;
& lt; / br & gt ;

Agrega el icono a la Bandeja llamando a la función API Shell_NotifyIcon. El primer parámetro & amp; quot; NIM_ADD & amp; quot; agrega un icono al área de la bandeja. Los otros dos valores posibles, NIM_DELETE y NIM_MODIFY se utilizan para eliminar o modificar un icono en la Bandeja: we & amp; apos; veremos cómo más adelante en este artículo. El segundo parámetro que enviamos a Shell_NotifyIcon es la estructura de TrayIconData inicializada.

Tome uno

Si CORRE su proyecto ahora usted & amp; apos; veré un icono cerca del reloj en la bandeja. Tenga en cuenta tres cosas.& amp; amp; nbsp;

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 (manipulador de mensajes).
& lt; br & gt ;
2) Segundo, hay un botón en la barra de tareas (obviamente no lo queremos).
& lt; br & gt ;
3) Tercero, cuando cierra su aplicación, el icono permanece en la Bandeja.& lt; / br & gt ;
& lt; / br & gt ;

Tome dos

Let & amp; apos; s resuelve esto hacia atrás. Para eliminar el icono de la Bandeja cuando salga de la aplicación, debe volver a llamar a Shell_NotifyIcon, pero con NIM_DELETE como primer parámetro. Lo haces en el controlador de eventos OnDestroy para el formulario principal.

& lt; pre & gt; procedimiento TMainForm.FormDestroy (Enviador: TObject); & lt; br & gt ;
comenzar & lt; br & gt ;
Shell_NotifyIcon (NIM_DELETE, @TrayIconData); & lt; br & gt ;
final ; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / pre & gt ;

Para ocultar la aplicación (aplicación y botón de apos; s) de la barra de tareas, nosotros & amp; apos; ll use un truco simple. En el código fuente de Proyectos, agregue la siguiente línea: Application.ShowMainForm: = False; antes de Application.CreateForm (TmainForm, MainForm); Por ejemplo, que se vea como:

& lt; pre & gt ;…& lt; br & gt ;
comenzar & lt; br & gt ;
Aplicación.Inicializar; & lt; br & gt ;
Application.ShowMainForm: = False; & lt; br & gt ;
Application.CreateForm (TMainForm, MainForm); & lt; br & gt ;
Aplicación.Ejecutar; & lt; br & gt ;
final. & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; / br & gt; & lt; / pre & gt ;

Y finalmente, para que nuestro icono de 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: procedimiento TrayMessage (var Msg: TMessage); mensaje WM_ICONTRAY; En segundo lugar, la definición de este procedimiento parece:

& lt; pre & gt; procedimiento TMainForm.TrayMessage ( var Msg: TMessage); & lt; br & gt ;
begincase Msg.lParam de & lt; br & gt ;
WM_LBUTTONDOWN: & lt; br & gt ;
comenzar & lt; br & gt ;
ShowMessage (& amp; apos; botón izquierdo clicado & lt; br & gt ;
– let & amp; apos; & amp; apos; s MOSTRAR el formulario!& amp; apos;); & lt; br & gt ;
MainForm.Show; & lt; br & gt ;
final ; & lt; br & gt ;
WM_RBUTTONDOWN: & lt; br & gt ;
comenzar & lt; br & gt ;
ShowMessage (& amp; apos; botón derecho clic en & lt; br & gt ;
– let & amp; apos; & amp; apos; s OCULTAR el formulario!& amp; apos;); & lt; br & gt ;
MainForm.Hide; & lt; br & gt ;
final ; & lt; br & gt ;
final ; & lt; br & gt ;
final ; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & gt; & gt; & br & gt; & gt; & gt; & gt; & gt; & gt;

Este procedimiento está diseñado para manejar solo nuestro mensaje, el WM_ICONTRAY. Toma el valor de LParam de la estructura del mensaje, lo que puede darnos el estado del mouse al activar el procedimiento. En aras de la simplicidad, nosotros & amp; apos; ll manejamos solo el mouse izquierdo hacia abajo (WM_LBUTTONDOWN) y el mouse derecho hacia abajo (WM_RBUTTONDOWN). Cuando el botón izquierdo del mouse está abajo en el icono, 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 abotonar, hacer doble clic en el botón, etc.

Eso y amp; apos; s it. Rápido y fácil. A continuación, & amp; amp; nbsp; you & amp; apos; veremos 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, usted y amp; apos; verán cómo mostrar un menú emergente cerca del icono.& amp; amp; nbsp;

& amp; # x203A; Informática

Dejar respuesta

Please enter your comment!
Please enter your name here

FOLLOW US

Related Stories