delphi 托盘程序
来源:互联网 发布:青岛邮箱数据 编辑:程序博客网 时间:2024/06/05 14:27
//主窗体中放置PopupMenu1,其中有Exit项
unit TrayUnit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs
, Menus, shellAPI; //TNotifyIconData是定义在shellAPI单元的;
{自定义消息,当小图标捕捉到鼠标事件时Windows向回调函数发送此消息}
const WM_MYTRAYICONCALLBACK = WM_USER + 1000 ;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Exit: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ExitClick(Sender: TObject);
private
{ Private declarations }
MyTrayIcon : TNotifyIconData ;
procedure WMMyTrayIconCallBack(Var Msg : TMessage); message WM_MYTRAYICONCALLBACK;
//托盘消息处理过程
procedure WMCommand(Var msg : TWMCommand); message WM_Command;
//处理托盘图标的右键菜单事件
procedure Minimize(var mess:TWMNCLBUTTONDOWN); message WM_NCLBUTTONDOWN;
//窗体最小化时的消息处理
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//将程序窗口样式设为TOOL窗口,避免在任务栏上出现
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
//设置托盘
Icon.Handle := LoadIcon(Hinstance,'MAINICON');
MyTrayIcon.cbSize := SizeOf(TNotifyIconData);// nid变量的字节数
MyTrayIcon.Wnd := Handle ;// 主窗口句柄
MyTrayIcon.uID := 1 ;// 内部标识,可设为任意数
MyTrayIcon.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE ;// 指明哪些字段有效
MyTrayIcon.uCallBackMessage := WM_MYTRAYICONCALLBACK ;//回调函数消息,将自定义托盘消息传递进去
MyTrayIcon.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指定
StrCopy(MyTrayIcon.szTip, PChar(Caption));
Shell_NotifyIcon(NIM_ADD,@MyTrayIcon);
ShowWindow(Handle,sw_Hide);
//ShowWindow(Handle,SW_SHOWNOACTIVATE);
// Visible := False ;//当程序启动时就最小化在托盘区即Form.Create时启用此语句
Application.ShowMainForm := False ;
SetForegroundWindow(Application.Handle);
end;
procedure TForm1.Minimize(var mess: TWMNCLBUTTONDOWN);
begin
if Mess.Hittest = htReduce then
Self.Hide
else inherited;
end;
procedure TForm1.WMCommand(var msg: TWMCommand);
begin
Case msg.ItemID of
Ord('A') : showmessage('我的右键菜单!');
Ord('B') : Self.close;//关闭程序主窗体
else inherited;
end;
end;
////消息过程实现
procedure TForm1.WMMyTrayIconCallBack(var Msg: TMessage);
var
CursorPos : TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK : //双击消息:弹出主窗口
begin
Visible := not Visible ;
Application.ShowMainForm := Visible ;
SetForegroundWindow(Application.Handle);
end ;
WM_RBUTTONDOWN : //鼠标右键:弹出菜单
begin
GetCursorPos(CursorPos);
Popupmenu1.Popup(CursorPos.X,CursorPos.Y);
//popupmen1里面就可以加入显示主窗口、退出等功能。
//这个右键菜单可以是静态的,如上面一句来弹出;也可以动态建立,如下面所示的方法:
//pm := createpopupmenu;//建立一个Hmenu,pm:hmenu;
//AppendMenu(pm,0,ord('A'),'关于....');//在指定的菜单里添加一个菜单项
//AppendMenu(pm,0,Ord('B'),'&Exit');
//加入菜单事件---》处理WMCOMMAND消息即可
//TrackPopupMenu(pm,Tpm_BottomAlign or Tpm_RightAlign, CursorPos.x, CursorPos.y, 0,handle,nil);
//在图标上方显示该弹出式菜单
end ;
end ;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var {程序被关闭时通知Windows去掉小图标}
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.uID := 1; //内部标识,与加入小图标时的数一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
end;
procedure TForm1.ExitClick(Sender: TObject);
begin
Close;
end;
end.
- delphi 托盘程序
- delphi 托盘程序
- delphi制作的托盘程序
- delphi制作的托盘程序
- Delphi程序最小化到托盘
- delphi编写windows服务程序,含托盘
- 如何设置delphi程序托盘图标
- delphi 隐藏指定程序的托盘图标
- 托盘程序的实现(delphi的消息处理函数)
- delphi创建具有托盘的服务程序(service)
- delphi创建具有托盘的服务程序(service)
- Delphi 最小化程序到任务栏托盘 增加右键PopMenu
- Delphi刷新托盘,去掉非正常退出的程序的托盘图标
- Delphi刷新托盘,去掉非正常退出的程序的托盘图标
- 托盘程序
- 托盘程序
- 托盘程序
- 托盘程序
- Win81的应用初体验
- Python3.x和Python2.x的区别
- ATM柜员机模拟程序
- CocoaPods安装和使用教程
- cookie 与session区别
- delphi 托盘程序
- 传智播客,一个感动我的地方
- 揭秘腾讯大数据之平台综述篇
- 静态数据管理类定义(单例模式)
- oracle 利用存储过程为表动态建立索引
- Swift 之 枚举
- MyEclipse8.5快捷键总结(持续更新)
- iosui学习中的课堂笔记 UISegmentedControl。UISlider。UIStepper。UISwitch。
- Leetcode Reverse Words in a String