托盘图标的现实(利用类)
来源:互联网 发布:chrome js调用本地exe 编辑:程序博客网 时间:2024/05/20 16:40
unit Unit_TrayIcon;
interface
uses
Windows, SysUtils, Messages, ShellAPI, Classes, Graphics, Forms, Menus,
StdCtrls, ExtCtrls;
type
TTrayNotifyIcon = class
private
Tray: TNotifyIconData;
FHWindow: HWND;
ActiveIcon: THandle;
Fimage: TImage;
FPopMenu: TPopupMenu;
FTitle: string;
public
constructor Create(AOwer: TComponent);
destructor Destroy; override;
procedure TrayShow;
procedure TrayWndProc(var Msg: TMessage);
procedure SetImage(Value: TImage);
property Image: TImage read FImage write SetImage;
property PopMenu: TPopupMenu read FPopMenu write FPopMenu;
property Title: string read FTitle write FTitle;
end;
implementation
{ TTrayNotifyIcon }
constructor TTrayNotifyIcon.Create(AOwer: TComponent);
begin
// 为TrayWndProc消息处理方法指定一个隐藏的窗口句柄
FHWindow := AllocateHWnd(TrayWndProc);
ActiveIcon := Application.Icon.Handle;
TrayShow;
Shell_NotifyIcon(NIM_ADD, @Tray);
end;
destructor TTrayNotifyIcon.Destroy;
begin
// 为TrayWndProc消息处理方法指定一个隐藏的窗口句柄
DeallocateHWnd(FHWindow);
Shell_NotifyIcon(NIM_DELETE, @Tray);
inherited Destroy;
end;
// 通过Image属性更改托盘图标当前所显示的图标
procedure TTrayNotifyIcon.SetImage(Value: TImage);
begin
if Assigned(Value) then
if Value <> Fimage then
begin
Fimage := Value;
ActiveIcon := Fimage.Picture.Icon.Handle;
TrayShow;
Shell_NotifyIcon(NIM_MODIFY, @Tray);
end;
end;
// 配置托盘图标所使用的结构信息
procedure TTrayNotifyIcon.TrayShow;
begin
Tray.cbSize := SizeOf(Tray);
Tray.Wnd := FHWindow;
Tray.uID := 100;
Tray.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
Tray.uCallbackMessage := WM_USER + 1000;
StrPCopy(Tray.szTip, Title);
// Tray.szTip := Title;
Tray.hIcon := ActiveIcon;
end;
// 消息处理方法: 用于获取对托盘的鼠标事件
procedure TTrayNotifyIcon.TrayWndProc(var Msg: TMessage);
var
P: TPoint;
begin
case Msg.LParam of
WM_LBUTTONDOWN:
begin
//单击
end;
WM_LBUTTONDBLCLK:
begin
//双击
end;
WM_RBUTTONDOWN:
begin
if Assigned(PopMenu) then
begin
GetCursorPos(p);
PopMenu.Popup(p.X, p.Y);
end;
end;
end;
end;
end.
主窗体中的调用方法:
procedure TFrmServer.FormCreate(Sender: TObject);
begin
NotifIco:=TTrayNotifyIcon.Create(Self);
NotifIco.PopMenu := PopupMenu1;
end;
procedure TFrmServer.FormDestroy(Sender: TObject);
begin
NotifIco.Free;
end;
procedure TFrmServer.N1Click(Sender: TObject);
begin
Close;
end;
- 托盘图标的现实(利用类)
- 托盘图标的创建
- 托盘图标的一次经历
- 托盘图标的任意隐藏
- 增加exe的托盘图标
- 最小化后右下角(托盘)小图标的实现
- 解决Java程序的托盘图标在Windows任务栏重建后丢失的问题(使用SystemTray类创建托盘图标)
- 托盘图标
- 托盘图标
- 托盘图标
- 托盘图标
- 托盘图标
- 托盘图标的删除和托盘程序的优化
- MFC下托盘图标的实现和托盘菜单
- MFC下托盘图标的实现和托盘菜单
- 托盘图标及菜单的处理
- 删除Windows托盘区的无效图标
- 隐藏指定程序托盘图标的方法
- 黑马程序员--SQL Server 中实现类似Split的字符串分割函数
- php中使用header函数后,页面提示:Warnging: Cannot modify header information - headers already sent by 错误的的原因
- java_文件复制
- 操作系统(Linux/Windows)中解决的问题记录
- git快捷入门 常用命令
- 托盘图标的现实(利用类)
- 存储集合元素的List转换为Map
- 安装完IIS localhost打不开
- Oracle PL SQL :TIPS
- 多边形bool操作效率对比
- 不同方法求解两个数的最大公约数代码
- 同步多线程
- visual assist X(VA_X) win7下不兼容的解决办法
- Openssl使用