Lenguaje de programación Borland Delphi
Para poner un icono en la bandeja del sistema hay que llamar a la API Shell_NotifyIcon declarada en la unidad ShellAPI, pasándole la constante NIM_ADD (para que agregue un icono) y la dirección de un registro TNotifyIconData con la información del icono que incluye el manejador del icono a mostrar, el texto a usar como ayuda cuando el ratón está sobre el icono, el manejador de la ventana que recibirá los mensajes del icono y el tipo de los mensajes que el icono enviará a esta ventana. Para ello en el USES de la aplicación haremos referencia a la unidad ShellApi y declararemos una constante con el mensaje y una variable de tipo TNotifyIconData:
uses
..., ShellAPI;
const
WM_ICONTRAY = WM_USER + 1; // Mensaje definido por el usuario
type
...
var
...
NotifyIconData : TNotifyIconData;
implementation
procedure TForm1.MinimizarAplicacion(Sender: TObject);
begin
with NotifyIconData do begin
hIcon := Icon.Handle;
StrPCopy(szTip, Application.Title);
Wnd := Handle;
uCallbackMessage := WM_ICONTRAY;
uID := 1;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
cbSize := sizeof(TNotifyIconData);
end;
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;
El Form1 recibirá mensajes WM_ICONTRAY del icono. Para capturar y manejar estos mensajes tenemos que declarar un nuevo método en nuestro formulario. Por ejemplo:
type
TForm1 = class(TForm)
...
private
{ Private declarations }
...
procedure Icontray(var Msg: TMessage); message WM_ICONTRAY;
public
{ Public declarations }
...
end;
En la implementación de este método puede, por ejemplo, mostrar un menú emergente cuando el usuario haga clic con el botón derecho sobre el icono. Para ello añada al formulario un TPopupMenu con el nombre "PopupMenu1", el siguiente código hará que al hacer clic con el botón derecho del ratón aparezca dicho menú:
procedure TForm1.Icontray(var Msg: TMessage);
var
CursorPos : TPoint;
begin
if Msg.lParam = WM_RBUTTONDOWN then begin
GetCursorPos(CursorPos);
PopupMenu1.Popup(CursorPos.x, CursorPos.y);
end else
inherited;
end;
Una vez minimizada la aplicación, para poner la opción de volver a mostrarla, hay que añadir un elemento al menú emergente y en el evento "OnClick" del mismo hay que poner el siguiente código:
procedure TForm1.mnuMostrarAplicacionClick(Sender: TObject);
begin
Show;
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData); //para quitar el icono de la barra de notificación
end;
Si decide poner la opción de cerrar la aplicación en el menú emergente que aparecerá al pulsar el botón derecho del ratón sobre el icono, para ello añada un nuevo elemento al menú emergente y en el evento "OnClick" del mismo coloque el siguiente código:
procedure TForm1.mnuSalirClick(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
Application.ProcessMessages;
Application.Terminate;
end;
NOTA: al menú emergente se le puede añadir cualquier acción (abrir otro formulario, ejecutar procedimientos, ...).
Publicado el: 2004-07-01