Delphi 7下最小化到系统托盘

Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘 学习Delphi时,使用了第3方控件CoolTrayIcon。CoolTrayIcon的功能很强大,能够将程序添加进托盘,省去了我们再编写代码来实现托盘。但是在看搜CoolTrayIcon的时候,发现好多朋友在求如何让程序在启动就最小化多托盘的方法。但是貌似都不曾成功过。笔者摸索了一下,成功实现了。 首先我们来看一下CoolTrayIcon的功能函数:根据CoolTrayIcon的使用实例来看, 阅读详情
在Delphi 7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:
1
2
3
4
5
6
7
8
9
_NOTIFYICONDATAA = record 
  cbSize: DWORD; 
  Wnd: HWND; 
  uID: UINT; 
  uFlags: UINT; 
  uCallbackMessage: UINT; 
  hIcon: HICON; 
  szTip: array [0..63] of AnsiChar; 
end; 

下面开始实现下最小化到系统托盘功能:
1.新建应用程序,然后在“菜单栏”→“Project”→“Options”→”Application“为程序设定下标题和图标,一定得设置图标,不让显示系统托盘的时候就会空白;
2.在窗体上放置一个右键菜单,添加两个菜单项,如下图所示:

3.窗体单元文件代码如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, ShellAPI, Menus; 
 
const 
  WM_TRAYMSG = WM_USER + 101;                   //自定义托盘消息 
type 
  TForm1 = class(TForm) 
    pm1: TPopupMenu; 
    mniN1: TMenuItem; 
    mniwo1: TMenuItem; 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    procedure mniN1Click(Sender: TObject); 
  private 
    procedure WMTrayMsg(var Msg: TMessage);message WM_TRAYMSG;    //声明托盘消息 
    procedure WMSysCommand(var Msg: TMessage);message WM_SYSCOMMAND; 
  public 
    { Public declarations } 
  end; 
 
var 
  Form1: TForm1; 
  NotifyIcon: TNotifyIconData;                    //定义托盘图标结构体 
implementation 
 
{$R *.dfm} 
{------------------------------------------------------------------------------- 
 Description: 窗体创建时,即创建托盘 
-------------------------------------------------------------------------------} 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  with NotifyIcon do 
  begin 
    cbSize := SizeOf(TNotifyIconData); 
    Wnd := Self.Handle; 
    uID := 1; 
    uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;   //图标、消息、提示信息 
    uCallbackMessage := WM_TRAYMSG; 
    hIcon := Application.Icon.Handle; 
    szTip := '托盘测试'; 
  end; 
  Shell_NotifyIcon(NIM_ADD,@NotifyIcon); 
end; 
{------------------------------------------------------------------------------- 
 Description: 窗体销毁时,卸载托盘 
-------------------------------------------------------------------------------} 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  Shell_NotifyIcon(NIM_DELETE,@NotifyIcon); 
end; 
{------------------------------------------------------------------------------- 
 Description: 截获窗体最小化消息,最小化到托盘 
-------------------------------------------------------------------------------} 
procedure TForm1.WMSysCommand(var Msg: TMessage); 
begin 
  if Msg.WParam = SC_ICON then 
    Self.Visible := False 
  else 
    DefWindowProc(Self.Handle,Msg.Msg,Msg.WParam,Msg.LParam); 
end; 
{------------------------------------------------------------------------------- 
 Description: 自定义的托盘消息 
-------------------------------------------------------------------------------} 
procedure TForm1.WMTrayMsg(var Msg: TMessage); 
var 
  p: TPoint; 
begin 
  case Msg.LParam of 
    WM_LBUTTONDOWN: Self.Visible := True;   //显示窗体 
    WM_RBUTTONDOWN: 
      begin 
        SetForegroundWindow(Self.Handle);   //把窗口提前 
        GetCursorPos(p); 
        pm1.Popup(p.X,p.Y); 
      end; 
  end;     
end; 
{------------------------------------------------------------------------------- 
 Description: 测试菜单项 
-------------------------------------------------------------------------------} 
procedure TForm1.mniN1Click(Sender: TObject); 
begin 
  ShowMessage('One'); 
end; 
 
end. 

4.运行结果如下:

参考MSDN(http://msdn.microsoft.com/en-us/library/bb773352(VS.85).aspx)对NOTIFYICONDATA结构体的介绍却是:

typedef struct _NOTIFYICONDATA {    
    DWORD cbSize;        //结构体的大小,以字节为单位    
    HWND hWnd;           //窗口的句柄    
    UINT uID;            //应用程序定义的任务栏图标的标识符    
    UINT uFlags;         //此成员表明具体哪些其他成员为合法数据    
    UINT uCallbackMessage;   //应用程序定义的消息标示    
    HICON hIcon;         //增加、修改或删除的图标的句柄    
    TCHAR szTip[64];     //指向一个以/0结束的字符串的指针    
    DWORD dwState;       //Version 5.0,图标的状态    
    DWORD dwStateMask;   //Version 5.0. 指明dwState成员的那些位可以被设置或者访问    
    TCHAR szInfo[256];   //指向一个以/0结束的字符串的指针,字符串的内容为气球提示内容    
    union {    
        UINT uTimeout;   //表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失    
        UINT uVersion;   //用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口    
    };    
    TCHAR szInfoTitle[64];   //指向一个以/0结束的字符串的指针。字符串的内容为气球提示的标题    
    DWORD dwInfoFlags;   //设置此成员用来给气球提示框增加一个图标,增加的图标出现在气球提示标题的左侧    
    GUID guidItem;       //保留    
    HICON hBalloonIcon;  //用于Windows Vista或更高版本的自定义气球图标    
} NOTIFYICONDATA, *PNOTIFYICONDATA;   

那么为了在Windows XP下也有气泡提示,那么我们手动添加几个类型,大概代码如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, ShellAPI, Menus; 
//---------------------开始:Delphi 7下添加此声明------------------------------- 
const 
  NIF_INFO        = $00000010;          //气泡显示标志 
  NIIF_NONE       = $00000000;          //无图标 
  NIIF_INFO       = $00000001;          //信息图标 
  NIIF_WARNING    = $00000002;          //警告图标 
  NIIF_ERROR      = $00000003;          //错误图标 
  NIIF_USER       = $00000004;          //XP使用hIcon图标 
type 
  TNotifyIconDataEx = record 
    cbSize: DWORD; 
    Wnd: HWND; 
    uID: UINT; 
    uFlags: UINT; 
    uCallbackMessage: UINT; 
    hIcon: HICON; 
    szTip: array [0..127] of AnsiChar; 
    dwState: DWORD; 
    dwStateMask: DWORD; 
    szInfo: array [0..255] of AnsiChar; 
    case Integer of 
      0: ( 
        uTimeout: UINT); 
      1: (uVersion: UINT; 
        szInfoTitle: array [0..63] of AnsiChar; 
        dwInfoFlags: DWORD);  
  end; 
//---------------------开始:Delphi 7下添加此声明------------------------------- 
const 
  WM_TRAYMSG = WM_USER + 101;                   //自定义托盘消息 
type 
  TForm1 = class(TForm) 
    pm1: TPopupMenu; 
    mniN1: TMenuItem; 
    mniwo1: TMenuItem; 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    procedure mniN1Click(Sender: TObject); 
  private 
    procedure WMTrayMsg(var Msg: TMessage);message WM_TRAYMSG;    //声明托盘消息 
    procedure WMSysCommand(var Msg: TMessage);message WM_SYSCOMMAND; 
  public 
    { Public declarations } 
  end; 
 
var 
  Form1: TForm1; 
  NotifyIcon: TNotifyIconDataEx;                    //定义托盘图标结构体 
implementation 
 
{$R *.dfm} 
{------------------------------------------------------------------------------- 
 Description: 窗体创建时,即创建托盘 
-------------------------------------------------------------------------------} 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  with NotifyIcon do 
  begin 
    cbSize := SizeOf(TNotifyIconDataEx); 
    Wnd := Self.Handle; 
    uID := 1; 
    uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP + NIF_INFO;   //图标、消息、提示信息 
    uCallbackMessage := WM_TRAYMSG; 
    hIcon := Application.Icon.Handle; 
    szTip := '托盘测试'; 
    szInfo := '提示内容'; 
    szInfoTitle := '气泡标题'; 
    dwInfoFlags := NIIF_USER; 
  end; 
  Shell_NotifyIcon(NIM_ADD,@NotifyIcon); 
end; 
{------------------------------------------------------------------------------- 
 ……以下代码与上面例子一样 
-------------------------------------------------------------------------------} 

运行结果如下:

 


Delphi程序最小化到托盘 unit frm_CloseOption; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls, cxGraphics, cxControls, cxLookAndF 阅读详情

相关推荐

Delphi CoolTrayIcon系统托盘控件实战应用

CoolTrayIcon是专为Delphi平台设计的第三方系统托盘图标组件,封装了Windows底层API,极大简化了托盘图标的创建与管理。相较于原生API手动处理消息循环和结构体操作,该控件以可视化方式集成于IDE组件面板,支持拖放式开发,显著提升开发效率。编译进.res后即可按需调用。在现代桌面应用程序的交互设计中,系统托盘图标不仅是程序“隐身”运行时的存在标识,更是用户快速访问核心功能的重要入口。

weixin_36213081的博客 378

delphi 关闭时缩小到托盘_delphi 实现最小化系统托盘

1、new -->application2、在form1中加入一个tPopMenu 命名为pm13、uses ShellAPI;4、定义一个常量在constWM_TRAYMSG = WM_USER + 101;5、在private中生命变量NotifyIcon: TNotifyIconData;6.声明两个消息procedure TfrmMain.WMSysCommand(var Msg: ...

weixin_39830588的博客 826

Delphi7最小化到系统托盘

一个有关Delphi生成的可执行程序最小化到系统托盘的小实例

delphi将程序最小化至右下角

程序新手,如果有不恰当的地方,请大家帮忙改正! 1、下载并安装Raize.v5.5控件,delphi版本为:delphi 7.0。 2、添加RzTrayIcon控件、PopupMenu控件至窗体上。 3、程序代码示例: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes...

weixin_30745641的博客 529

电流采样(分流器与霍尔传感器)

霍尔效应霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。简单原理如图1所示,半导体薄片两端通以控制电流I,垂直方向施加磁感应强度为B的匀强磁场,d为半导体材料的厚度,k为霍尔常数,它与半导体材质有关,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压,它们之间的关系为。霍尔元件。

weixin_48867130的博客 1万+

水星路由器+群晖NAS+外网访问

水星路由器+群晖NAS+外网访问 有了公网IP,家里是水星路由器的 怎么设置外网访问 1.先电脑登录群晖的http://【你的群晖名】.quickconnect.to/ 2.【控制面板】进入设置 3.选择synology依次设置 ,【主机名称】就是你的名称。注意:左下角第7步,一定勾选。 4.下面进入192.168.1.1水星路由器设置。【IP与MAC绑定】点击NAS对应的【绑定】注意,点这里之前Nas一定设置了固定内网ip(后面补充 )。 5.【高级用户】-虚【拟服务器】。常用服务器不用选,其他的对应

wjxue201的博客 2597

delphi 关闭时缩小到托盘_最小化Delphi窗体到系统托盘

I am a Delphi learner. I am looking for solutions so that Delphi MainForm should be minimized to the System Tray instead of Taskbar. On Right Click on the System Tray Icon there should be some menus l...

weixin_39865440的博客 333

第10章:位同步与Gardner环路(1)

第10章(1)内容如下:一、位同步与载波同步的区别1、采样时钟相位偏差的影响2、采样时钟频率偏差的影响二、Gardner环路算法与插值方法1、插值滤波器2、Gardner误差检查算法三、Gardner环路中环路滤波器与数字振荡器设计1、环路滤波器2、数控振荡器(NCO)四、Gardner环路的可运行MATLAB代码五、参考资料六、致谢 最近搞懂了Gardner环路的一些知识,于是更新第10章——位同步。 如果你稍不留意的话,这可能是你在网上能看到的介绍Gardner环路及其MATLAB仿真最详细的一篇文章了

weixin_44283855的博客 1万+

delphi 关闭时缩小到托盘,最小化Delphi窗体到系统托盘

I am a Delphi learner. I am looking for solutions so that Delphi MainForm should be minimized to the System Tray instead of Taskbar. On Right Click on the System Tray Icon there should be some menus l...

weixin_35763448的博客 302

【机器学习—评估指标】混淆矩阵、准确率、精确率、召回率、F1分数、ROC曲线和AUC

机器学习评价指标是衡量模型性能的关键工具。本文介绍了常见指标及其计算方法:1.混淆矩阵展示分类预测结果分布,包含TP、TN、FP、FN四个基础指标;2.准确率反映整体预测正确率;3.精确率关注预测正例的准确性;4.召回率衡量正例检出能力;5.F1分数综合平衡精确率和召回率;6.ROC曲线通过TPR与FPR的权衡关系评估模型性能,AUC值量化区分能力。文章详细说明了各指标的定义、计算公式、适用场景及局限性,并通过Python代码示例演示了具体实现方法,特别对ROC曲线和AUC的计算原理进行了深入解析。

weixin_51375278的博客 6744

基于YOLOv11的军事目标识别系统设计与实现(坦克、舰船检测)

DOTA-v2.0(包含多种军事装备的航拍图像)图片数量:11,268类别:18类,包括坦克、舰船、战斗机等分辨率:800×800~4000×4000HRSC2016(高分辨率舰船检测数据集)图片数量:1,061类别:舰船及子类特点:包含多种视角和复杂背景图片数量:5,000+类别:22种军用飞机标注:精确边界框自建数据集建议收集来源:公开军事演习视频、卫星图像、模拟游戏截图数据增强:模拟不同天气、遮挡、低光照等战场环境。

YOLO 450

Delphi中如何让窗口最小化至系统托盘

很多人认为Delphi是一个RAD工具,包括我本人在上学的时候对Delphi也有偏见,现在走出了“象牙塔”,涉及的面广了,遇到的问题多了,慢慢地也有了自己的一点心得体会。其实,Delphi是基于Object Pascal 语言的开发工具,也就是说Delphi本质上是一种语言工具,并且是真正的面向对象的。下面我举的例子就是用Delphi实现的一个托盘小程序。程序短小精悍,脉络分明,我将对关键部分进行...

weixin_30696427的博客 219

打开 AI 投研新时代 —— 深度解析 GitHub 高星项目 daily_stock_analysis

GitHub热门开源项目"daily_stock_analysis"是一款AI驱动的智能股票分析工具,能自动抓取行情数据、分析新闻语义并生成结构化报告。该项目采用Python开发,通过GitHub Actions实现全自动运行,支持邮件、企业微信等多渠道推送。核心功能包括AI决策仪表盘、多数据源整合和零成本部署方案,特别适合需要自动化投研辅助的个人投资者。项目强调其仅为分析工具而非投资建议,提醒用户注意AI模型的潜在误差。该工具通过智能化处理重复工作,帮助投资者提升决策效率,成为量化投资

陈奕昆的博客 1526
上一篇: delphi 7文件、磁盘操作常用函数
下一篇: MySql常用命令大全
dinphi
博客等级 码龄18年 11粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值