Yo en el procedimiento Restaurar (que se ejecuta con el doble click en el TrayIcon o con el popupMenu) hago unos pasos más, ya que se comportaba "extraño" cuando lo restauraba, por ejemplo no me permitía minimizar otra vez la ventana si primero no hacía "foco" en la ventana:
Código Delphi
[-]procedure TFormCustom.Restaurar1Click(Sender: TObject);
begin
RestaurarVentana;
end;
procedure TFormCustom.TrayIcon1DblClick(Sender: TObject);
begin
RestaurarVentana;
end;
procedure TFormCustom.RestaurarVentana;
begin
Show;
WindowState := wsNormal;
TrayIcon1.Visible := False;
Application.BringToFront;
Application.Restore;
end;
Y en vez de usar el TApplicationEvents, para no agregar una unit más, uso directamente:
Código Delphi
[-]
Application.OnMinimize := MinimizarAplicacion;
procedure TFormCustom.MinimizarAplicacion(Sender: TObject);
begin
Self.Hide;
TrayIcon1.Visible := True;
end;
Esto es con el Delphi XE, se que los anteriores tenían algunos problemas con este componente.