您的位置:首页 > 其它

一个托盘程序

2008-06-12 09:27 387 查看
unit MainUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Menus, ShellAPI, ExtCtrls;

const

ICON_ID= 1;

MI_ICONEVENT= WM_USER+ 1;

type

TMainForm = class(TForm)

PopupMenu1: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormActivate(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

private

procedure SetupIcon;   //在托盘中安装图标

procedure ChangeIcon(s: Boolean);   //改变托盘中的图标

procedure FreeIcon; //在托盘中释放图标

procedure IconOnClick(var Msg: TMessage); message MI_ICONEVENT; //托盘图标电击事件

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

NormalIcon, DisabledIcon: TIcon; //正常和失效情况下的图标

Status: Boolean; //标志是“使用状态”还是“禁用状态”

Apath: String;

implementation

uses ShowUnit;

{$R *.DFM}

procedure TMainForm.SetupIcon;

var

IconData: TNotifyIcondata;

begin

NormalIcon:= TIcon.Create;

DisabledIcon:= TIcon.Create;

NormalIcon.LoadFromFile(Apath+ '1.ico');

DisabledIcon.LoadFromFile(Apath+ '2.ico');

IconData.cbSize:= SizeOf(IconData);

IconData.Wnd:= Handle;

IconData.uID:= Icon_ID;

IconData.uFlags:= NIF_ICON or NIF_MESSAGE or NIF_TIP;

IconData.uCallbackMessage:= MI_ICONEVENT;

IconData.hIcon:= NormalIcon.Handle;

IconData.szTip:= '新增托盘图标';

Shell_NotifyIcon(NIM_ADD, @IconData);

end;

procedure TMainForm.ChangeIcon(s: Boolean);

var

IconData: TNotifyIconData;

begin

IconData.cbSize:= SizeOf(IconData);

IconData.Wnd:= Handle;

IconData.uID:= Icon_ID;

if s= False then

begin

IconData.hIcon:= DisabledIcon.Handle;

Status:= False;

N1.Enabled:= False;

end

else

begin

IconData.hIcon:= NormalIcon.Handle;

Status:= True;

N1.Enabled:= True;

end;

IconData.uFlags:= NIF_ICON;

Shell_NotifyIcon(NIM_MODIFY, @IconData);

end;

procedure TMainForm.FreeIcon;

var

IconData: TNotifyIconData;

begin

IconData.cbSize:= SizeOf(IconData);

IconData.Wnd:= Handle;

IconData.uID:= Icon_ID;

Shell_NotifyIcon(NIM_DELETE, @IconData);

end;

procedure TMainForm.IconOnClick;

var

pt: TPoint;

begin

if (Msg.LParam= WM_LBUTTONDOWN) and (Status= True) then

ShowForm.Show;

if   (Msg.LParam= WM_RBUTTONDOWN) then

begin

GetCursorPos(pt);

PopupMenu1.Popup(pt.x, pt.y);

end;

end;

procedure TMainForm.FormCreate(Sender: TObject);

begin

Apath:= ExtractFilePath(ParamStr(0));

Status:= True;

SetupIcon;

ChangeIcon(True);

ShowWindow(Application.Handle, SW_HIDE);

SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);

end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

FreeIcon;

NormalIcon.Free;

DisabledIcon.Free;

end;

procedure TMainForm.FormActivate(Sender: TObject);

begin

MainForm.Width:= 0;

MainForm.Height:= 0;

ShowWindow(Application.Handle, SW_HIDE);

end;

procedure TMainForm.N1Click(Sender: TObject);

begin

ShowForm.Show;

end;

procedure TMainForm.N2Click(Sender: TObject);

begin

if Status= True then

begin

ChangeIcon(False);

N2.Caption:= '使用';

end

else

begin

ChangeIcon(True);

N2.Caption:= '禁用';

end;

end;

procedure TMainForm.N3Click(Sender: TObject);

begin

Close;

end;

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: