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.
一个托盘程序
最新推荐文章于 2024-02-18 20:30:05 发布