Es útil escribir notificaciones en el SysTray y resulta profesional hacerlo, para ello ya publiqué el componente SysTrayIcon. En esta ocasión muestro como hacerlo sin necesidad de dicho componente, para aplicaciones sencillas.
Utiliza sólo la API y sigue el estándar de Win10:
Definiciones:
TNotifyIconData = record cbSize: DWORD; Wnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array [0..127] of AnsiChar; dwState: DWORD; dwStateMask: DWORD; szInfo: array [0..255] of AnsiChar; uTimeout: UINT; szInfoTitle: array [0..63] of AnsiChar; dwInfoFlags: DWORD; end; // Ampliaciones para Vista const NIIF_INFO = $00000001; const NIF_INFO = $00000010; const NIF_REALTIME = $00000040; const NIF_SHOWTIP = $00000080; const NIIF_USER = $00000004;
El procedimiento:
procedure ShowBalloon(Handle: THANDLE; Titulo, Texto: String); var Data: TNotifyIconData; begin ZeroMemory(@Data, sizeof(TNotifyIconData)); Data.cbSize:= sizeof(TNotifyIconData); Data.uFlags:= NIF_ICON or NIF_INFO or NIF_REALTIME; Data.dwInfoFlags:= NIIF_INFO; lstrcpyn(Data.szInfoTitle, PCHAR(Titulo), 64-1); lstrcpyn(Data.szInfo, PCHAR(Texto), 256-1); Data.uTimeOut:= 1000; Data.Wnd:= Handle; Shell_NotifyIcon(NIM_ADD, @Data); Shell_NotifyIcon(NIM_MODIFY, @Data); Shell_NotifyIcon(NIM_DELETE, @Data); // Para WinXP comentar esta línea. En el resto de S.O. funciona con esta línea comentada end;
Uso:
procedure TForm1.Button2Click(Sender: TObject); begin ShowBalloon(Handle, Edit1.Text, Edit2.Text); end;
Subo un proyecto de ejemplo.
Saludos.