PDA

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.

;)