Para implementar notificaciones de estilo globo en Windows con Delphi, se utiliza la estructura TNotifyIconData del módulo ShellAPI del sistema. Esta estructura gestiona los íconos de la barra de tareas y los mensajes de notificación. A continuación, se muestra su definición en Delphi con comentarios en español.
type
TNotifyIconData = record
cbSize: DWORD; // Tamaño en bytes de la estructura
hWnd: HWND; // Identificador de la ventana asociada
uID: UINT; // Identificador del ícono definido por la aplicación
uFlags: UINT; // Indica qué campos son válidos
uCallbackMessage: UINT; // Mensaje personalizado para eventos
hIcon: HICON; // Manejador del ícono a mostrar
szTip: array[0..63] of TCHAR; // Texto emergente (tooltip)
dwState: DWORD; // Estado del ícono (versión 5.0)
dwStateMask: DWORD; // Máscara de estado (versión 5.0)
szInfo: array[0..255] of TCHAR; // Contenido de la notificación de globo
uTimeout: UINT; // Duración en milisegundos del globo
uVersion: UINT; // Versión de la interfaz de mensajes
szInfoTitle: array[0..63] of TCHAR; // Título del globo de notificación
dwInfoFlags: DWORD; // Indicadores para íconos adicionales en el globo
guidItem: GUID; // Reservado para uso futuro
hBalloonIcon: HICON; // Ícono personalizado para el globo (Vista o superior)
end;
Para simplificar el uso, se define un procedimiento que configura la estructura y establece los parámetros necesarios.
procedure ConfigurarGloboNotificacion(mensaje: string; indicadores: Cardinal);
begin
with DatosNotificacion do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Application.Handle; // Ventana principal de la aplicación
uID := 1; // Identificador único para el ícono
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP or NIF_INFO;
hIcon := Application.Icon.Handle;
StrPCopy(szInfoTitle, 'Aviso');
StrPCopy(szInfo, mensaje);
dwInfoFlags := indicadores;
uCallbackMessage := WM_APP + 100; // Mensaje personalizado para interacción
uTimeout := 2000; // Tiempo de visualización en milisegundos
uVersion := NOTIFYICON_VERSION_4;
end;
end;
Para mostrar una notificación inicial, se invoca el procedimiento y se agrega el ícono al sistema.
ConfigurarGloboNotificacion('Haga clic derecho para restaurar la aplicación', NIIF_INFO);
Shell_NotifyIcon(NIM_ADD, @DatosNotificacion);
Si se necesita actualizar la notificación, se modifica el contenido y se actualiza el ícono.
ConfigurarGloboNotificacion('El servicio se ha iniciado correctamente', NIIF_WARNING);
Shell_NotifyIcon(NIM_MODIFY, @DatosNotificacion);
Finalmente, al terminar la aplicación, se elimina el ícono de la barra de tareas.
Shell_NotifyIcon(NIM_DELETE, @DatosNotificacion);
Aquí, DatosNotificacion es una varialbe de tipo TNotifyIconData declarada en el ámbito de la aplicación.