Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Minimizar aplicación en la barra de notificación de Windows - Delphi
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

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A