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

本文介绍了如何使用Delphi将应用程序在关闭时缩小到系统托盘,通过创建TNotifyIcon,处理WM_SYSCOMMAND和WM_TRAYMSG消息,实现在点击关闭按钮时隐藏窗体并显示在托盘区域,以及响应托盘区的鼠标点击事件。
摘要由CSDN通过智能技术生成

1、new -->application

2、在form1中加入一个tPopMenu 命名为pm1

3、uses ShellAPI;

4、定义一个常量在

const

WM_TRAYMSG = WM_USER + 101;

5、在private中生命变量

NotifyIcon: TNotifyIconData;

6.声明两个消息

procedure TfrmMain.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;

procedure TfrmMain.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;

7、oncreate中

with NotifyIcon do

begin

cbSize := SizeOf(TNotifyIconData);

Wnd := Self.Handle;

uID := ;

uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP; //图标、消息、提示信息

uCallbackMessage := WM_TRAYMSG;

hIcon := Application.Icon.Handle;

szTip := 'erp服务';

end;

Shell_NotifyIcon(NIM_ADD, @NotifyIcon);

//去掉关闭按钮

EnableMenuItem(GetSystemMenu(Handle, FALSE), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);

8、ondestroy中

Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);

整体代码

unit Unit1;

interface

uses

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

Dialogs, ShellAPI, Menus;

const

WM_TRAYMSG = WM_USER + ;

type

TForm1 = class(TForm)

pm1: TPopupMenu;

N1: TMenuItem;

procedure FormDestroy(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

NotifyIcon: TNotifyIconData;

procedure WMTrayMsg(var Msg: TMessage); message WM_TRAYMSG; //声明托盘消息

procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormDestroy(Sender: TObject);

begin

Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

with NotifyIcon do

begin

cbSize := SizeOf(TNotifyIconData);

Wnd := Self.Handle;

uID := ;

uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP; //图标、消息、提示信息

uCallbackMessage := WM_TRAYMSG;

hIcon := Application.Icon.Handle;

szTip := 'erp服务';

end;

Shell_NotifyIcon(NIM_ADD, @NotifyIcon);

//去掉关闭按钮

EnableMenuItem(GetSystemMenu(Handle, FALSE), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);

end;

{ TForm1 }

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;

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;

end.

//这是从网上找的在delphi7测试通过(引用的哪忘了)--- http://blog.csdn.net/akof1314/article/details/6411179 这个列牛B

delphi 实现最小化系统托盘(rz控件最简单 评论)

1.new -->application 2.在form1中加入一个tPopMenu 命名为pm1 3.uses ShellAPI; 4.定义一个常量在 const WM_TRAYMSG = W ...

Delphi - 利用TRzTrayIcon实现WinFrm工程最小化到托盘

第三方RC控件的安装 浏览器搜索Delphi Rz控件下载,找到下载一个安装文件,解压后点击RC3.exe一键安装. Delphi WinFrm工程最小化到托盘 Delphi新建WinFrm工程,在主 ...

VC++ 最小化到托盘、恢复

所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分.在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区. 一.托盘编程相关函数   ...

outlook新邮件到达提醒设置以及outlook最小化到托盘设置

有些邮件是需要马上处理的,因此希望能在收到邮件之后马上就知道,但是有不希望频繁的去检查有没有.outlook可以帮我们轻松做到新邮件到达提醒. 一 .设置outlook新邮件到达提醒:选项->电 ...

vc++ 最小化到托盘的详细实现

在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现: 1.声明一个NOTIFYICONDATA类,也就是NOTIFYICOND ...

【VS开发】最小化到托盘 shell_notifyicon和NOTIFYICONDATA

shell_notifyicon和NOTIFYICONDATA Shell_NotifyIcon函数,向任务栏的状态栏发送一个消息 函数原型 BOOL Shell_NotifIcon( DWORD d ...

C++ 最小化到托盘

#define WM_SHOWTASK (WM_USER + 1) void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID &a ...

WPF实现窗口最小化到托盘,并且实现右击菜单

原版是从网上找了一位大神的,自己只是用了一点适合自己的. 具体实现 1.首先已经确认WPF中没有实现最小化托盘的类与方法,用到了winform中的程序集 using Drawing = System. ...

MFC窗口实现最小化到托盘 右键菜单和还原

//.h文件 void toTray();//最小化到托盘 void DeleteTray();//删除托盘图标 afx_msg LRESULT OnShowTask(WPARAM wParam,LP ...

随机推荐

setNeedsDisplay,setNeedsLayout

UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到UIGraph ...

jquery-validation 使用

jquery-validation 使用 一.用前必备 官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: ...

用Appium进行android自动化测试

appium是开源的移动端自动化测试框架,可以测试ios,android应用.appium让移动端自动化测试不必限定在某种语言和某个具体的框架:也就是说任何人都可以使用自己最熟悉最顺手的语言以及框架来 ...

JodaTime library not available - @DateTimeFormat not supported

使用spring的@DateTimeFormat来格式化Date类型时,报错: org.springframework.validation.BindException: org.springfram ...

NodeJS服务器退出:完成任务,优雅退出

上一篇文章,我们通过一个简单的例子,学习了NodeJS中对客户端的请求(request)对象的解析和处理,整个文件共享的功能已经完成.但是,纵观整个过程,还有两个地方明显需要改进: 首先,不能共享完毕 ...

使用 Xcode 和 Android Studio 管理 iOS 和 Android 项目版本

在移动应用开发和运营的过程中,版本管理是一个老生常谈的基础问题,一些版本的基本概念也常常会困扰我们的研发和运营人员.同时,手动管理软件版本,也常常会因为不小心导致后续的发布和更新问题. 这里,我准备了 ...

动态规划(背包问题):POJ 1742 Coins

Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 32955   Accepted: 11199 Descripti ...

mysql 1055

在 /etc/my.cnf 文件里加上如下: sql_mode=NO_ENGINE_SUBSTITUTION

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值