Ver la Versión Completa : Ejecucion en Icon Tray
Dario Gustavo
15-08-2004, 15:26:36
Buenos Dias
Como puedo hacer una aplicacion (en Delphi 5) que al ejecutarla se aloje directamente en el Icon Tray y no se muestre en la barra de tareas ?
Muchas Gracias
Dario.
kalisto
15-08-2004, 19:06:51
Para que no se muestre en la barra de tareas en el archivo de proyecto tienes que poner lo siguiente:
Application.ShowMainForm := False;
Para colocar el icono necesitamos la función Shell_NotifyIcon del api de Windows, por lo que en la seccion uses tendremos que
añadir Shellapi.
Para responder a los eventos de raton al pinchar sobre el icono tendremos que crear una funcion que maneje el mensaje de Windows que se produce al situar el puntero del raton sobre el icono.
Posteriormente tendremos que filtrar el evento que nos interese. Esto lo hacemos mediante un popup menu.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,shellapi, Menus;
const WM_ICONCLICKED = WM_USER + 100;//mensaje a inteceptar
NIM_ICON_ID = 1; // solo ponemos un icono
type
TForm1 = class(TForm)
Button1: TButton;
PopupMenu1: TPopupMenu;
opcion11: TMenuItem;
opcion21: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure opcion11Click(Sender: TObject);
procedure opcion21Click(Sender: TObject);
private
{ Private declarations }
NotifyInfo : TNotifyIconData;
Procedure IconClicked( Var Msg: TMessage ); Message WM_ICONCLICKED;
//Procedimiento que nos notifica de que el puntero esta sobre el icono
procedure ColgarIcono(visible:boolean);//Pone el icono en la bandeja del sistema
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.visible:=false;
ColgarIcono(true);
end;
procedure TForm1.ColgarIcono(visible:boolean);
var
msg:integer;
begin
With NotifyInfo Do Begin
cbSize := SizeOf(NotifyInfo);
Wnd := Handle; // Ventana a la que se enviarán los mensajes
uID := NIM_ICON_ID; // Identificador del Icon en la barra
uFlags := NIF_ICON Or NIF_MESSAGE Or NIF_TIP;
uCallbackMessage := WM_ICONCLICKED; // Mensaje que deberá generar
hIcon := application.Icon.Handle; // Icono que se mostrará
szTip := 'Icono en su puesto'; // Texto indicativo
end;
if visible then
msg:=NIM_ADD
else
Msg:=NIM_DELETE;
Shell_NotifyIcon(Msg, @NotifyInfo); // Añadir Icono o quitarlo en funcion de visible
end;
Procedure tform1.IconClicked( Var Msg: TMessage );
var
pt:tpoint;
begin
if msg.lparam=WM_LBUTTONUP then
begin
getcursorpos(pt);
SetForegroundWindow (Handle);
popupmenu1.popup(pt.x,pt.y);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
colgarIcono(False);
end;
procedure TForm1.opcion11Click(Sender: TObject);
begin
showwindow(application.handle,SW_SHOW);
form1.visible:=true;
end;
procedure TForm1.opcion21Click(Sender: TObject);
begin
CLOSE;
end;
end.
jachguate
15-08-2004, 22:30:24
También podes valerte de algún componente que ya encapsule la creación y mantenimiento del ícono en el Tray, como el TrxTrayIcon de las rusas.
Hasta luego.
;)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.