托盘图标_实现方法_最小化到托盘_关闭到托盘_delphi_托盘汇总

托盘图标_实现方法_最小化到托盘_关闭到托盘_delphi_托盘汇总

转自:http://midasyang.blog.163.com/blog/static/189744104201141245344681/

启动不显示主窗体
如果通过Form1.Visible:=False;语句来实现的话,会出现主窗体一闪而过的情形。更好的办法是在OnShow事件中添加Application.ShowMainForm := False;

程序不出现在任务栏
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_HIDE);
end;

点击关闭按钮至托盘
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False;
Self.Hide;
end;
但这儿有个问题,在“开始”菜单中使用关闭或重启系统时,由于程序的存在,系统总是不能关闭或重启, 然后就返回到了桌面。解决方案如下:
//声明拦截WM_QueryEndSession消息的过程
procedure WMQueryEndSession(var Msg: TMessage); message WM_QueryEndSession;

procedure TForm1.WMQueryEndSession(var Msg: TMessage);
begin
Msg.Result := 1;
end;
经测试,系统关机时不会执行OnClose事件,但会执行OnDestroy事件。另Raize托盘控件RzTrayIcon有QueryEndSession(Sender: TObject;
var AllowSessionToEnd: Boolean);事件,把AllowSessionToEnd置为真亦可。

最小化到托盘
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
Self.Close
else
inherited;
end;

最大化和最小化时的动画
Type
TZoomAction = (zaMinimize, zaMaximize);

procedure ZoomEffect(AForm: TForm; AOperation: TZoomAction);
var
rcStart, rcEnd, rcTray: TRect;
hwndTray, hwndChild: hWnd;
begin
// 寻找系统托盘区的位置
hwndTray := FindWindow(‘Shell_TrayWnd‘, nil);
hwndChild := FindWindowEx(hwndTray, 0, ‘TrayNotifyWnd‘, nil);
GetWindowRect(hwndChild, rcTray);
//点击用于最大化/最小化,并切换起始/结束
if AOperation = zaMinimize then
begin
rcStart := AForm.BoundsRect;
rcEnd := rcTray;
end
else begin
rcEnd := AForm.BoundsRect;
rcStart := rcTray;
end;
DrawAnimatedRects(AForm.Handle, IDANI_CAPTION, rcStart, rcEnd);
end;
再分别在OnCloseQuery中添加
ZoomEffect(Self, zaMinimize);
在OnShow中添加
ZoomEffect(Self, zaMaximize);

左击托盘显示或者隐藏
在托盘的左击事件中添加
if Self.Showing then
Self.Close
else begin
Self.Show;
SetForegroundWindow(Application.Handle);
end

窗体是否处于激活状态
procedure WM_ACTIVATEAPP( var Message:TWMACTIVATEAPP); message WM_ACTIVATEAPP;

procedure TForm1.WMACTIVATEAPP(var message: TWMACTIVATEAPP);
begin
//是否处于激活窗体状态Message.Active
end;

窗体是否最小化状态
if IsIconic(Self.Handle) then 
ShowWindow(Self.Handle, SW_RESTORE);

程序总是显示在最上面
简单的办法是Self.FormStyle := fsStayOnTop;但会出现闪烁,比较好的办法如下
if not ShowOnTop then
SetWindowPos(Self.Handle , HWND_NOTOPMOST, 0,0,0,0, SWP_NOMOVE + SWP_NOSIZE) //普通窗口
else
SetWindowPos(Self.Handle, HWND_TOPMOST, 0,0, 0,0, SWP_NOMOVE + SWP_NOSIZE); //最上面
 
 
http://shuwen186.blog.163.com/blog/static/1642732020112973721371/

时间: 2024-10-25 09:01:22

托盘图标_实现方法_最小化到托盘_关闭到托盘_delphi_托盘汇总的相关文章

Winform 拦截最小化、最大化、关闭事件【整理】

1 const int WM_SYSCOMMAND = 0x112; 2 //窗体关闭消息 3 const int SC_CLOSE = 0xf060; 4 //窗体最小化消息 5 const int SC_MINIMIZE = 0xf020; 6 //窗体最大化消息 7 const int SC_MAXIMIZE = 0xf030; 8 //窗体还原消息 9 const int SC_NOMAL = 0xf120; 10 //窗体还原消息 11 const int SC_RESTORE = 6

RHEL/CentOS 7最小化安装后需做的30件事情

导读 CentOS是一个工业标准的Linux发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程序等操作. 阅读帖子的时候请先完成 RHEL/CentOS 最小化安装,这是首选的企业和生产环境.如果还没有,你可以按照下面的指南,它会告诉你两者的最小化安装方法. 最小化安装 CentOS 7 最小化安装 RHEL 7 我们会基于工业标准的需求来介绍以下列出的这些重要工作.我们希望这些东西在你配置

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)转载自码农网

CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程序等操作. 这篇文章介绍了 “安装完 RHEL/CentOS 7 后需要做的 30 件事情”.阅读帖子的时候请先完成 RHEL/CentOS 最小化安装,这是首选的企业和生产环境.如果还没有,你可以按照下面的指南,它会告诉你两者的最小化安装方法. 最小化安装 CentOS 7 最小化安装 RHEL

C#窗体皮肤制作(二):创建窗体库项目以及最小化、最大化、关闭按钮的实现

很高兴有朋友关注这篇博客,同时也十分抱歉让关注的朋友久等了,隔上一篇博客也有3个月没有更新,主要是由于3月份辞职,4月份初离职到期离开了北京高德,来到了上海张江.目前新工作也处于熟悉当中,希望大家能体谅.刚好这周末有点时间,我就接着写写,这篇博客主要是针对初学者,希望给为他们能提供一种较易理解的窗体皮肤制作思路,记得自己当初学习C#编程的时候也是摸着石头过河. 闲话少说,我还是接着上篇博客继续写,上次说明了下如何收集图片资源,这次就以360安全卫士来做示例进行模仿,本来也想过模仿下qq,但是qq

翻译:让网络更快一些——最小化浏览器中的回流(reflow)

关于reflowreflow(英音:[ri:’fl?u] 美音:[ri’flo])在词典中的解释是回流,逆流.而在web应用中,翻译为回流有些牵强.我个人觉得,理解为回炉(重新塑形),似乎更加形象一点.举个例子,页面上节点是以树的形式展现的.假如我使用JavaScript砍掉一个节点,这棵树为了不脱节,肯定要重新梳理一遍,将砍掉的那个断点重新结合起来又形成一颗完整的树,而这个结合梳理过程就是这里的reflow,所谓回流,就是由于某些原因(如修改),要将元素回过头来重新“流”一遍.而本译文的重点就

Centos7最小化系统安装_配置

本文总结了作者使用centos最小化安装时,碰到的问题和解决方案. 网络问题.作者使用虚拟机安装时,网卡并没有激活.操作: 1 cd /etc/sysconfig/network-script 2 vi 要编辑的网卡 3 更改 onboot = yes 4 # 重启network 5 systemctl restart network 使用ip address命令查看IP地址 使用XSHELL远程连接虚拟机 1 #检测SSHD服务是否开启 2 systemctl status sshd 3 #如

最小化托盘的实现方法

在书上看到的,觉得有用,记下了. 首先,最小化托盘的基本原理是,将应用程序的主窗体隐藏,然后在托盘中绘制应用程序的图标.然后再为托盘图标添加一些事件处理. 核心函数是Shell_NotifyIcon()函数,负责向系统传递消息,添加.修改或删除托盘区的图标.原型: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYCONDATA pnid ); 其中dwMessage标示功能,有NIM_ADD/NIM_DELETE

Linux窗口最小化消失,任务栏上无法找到的解决方法

“我在Linux系统下最小化窗口时就消失了,在任务栏上也无法找到,你知道怎么让它在任务栏上显示吗?”——到目前为止,已经有不下于五个朋友问过我这个问题.尽管这是一个Linux系统X Window中入门级的操作,但我很惊讶居然让这么多人感到迷惑.更有趣的是,有个家伙发现这种情况下可以用Alt+Tab切换窗口,于是就以为是自己安装的Linux操作系统有问题,问我是不是需要重装系统! 闲话少说,上解决方法:先纠正一个概念,在Linux的Gnome或KDE桌面环境里,跟Windows的任务栏一样的横条叫

jdk_Arrays类_排序方法_研究

private static void sort1(int x[], int off, int len) { // Insertion sort on smallest arrays //长度小于7,采用冒泡排序 if (len < 7) { for (int i=off; i<len+off; i++) for (int j=i; j>off && x[j-1]>x[j]; j--) swap(x, j, j-1); return; } //长度不小于7,采用快速