Crear Notificaciones de Globo en Windows Usando Delphi

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.

Etiquetas: Delphi Windows API TNotifyIconData ShellAPI notificaciones de globo

Publicado el 7-12 06:14