delphi 给程序加托盘图标

一些程序运行时,会在桌面的右下角显示一个图标(任务栏的右边),这类图标称为 托盘。托盘是一个PNotifyIconDataA类型的结构,要增加托盘图标其实就是对结构PNotifyIconDataA的操作。使用控件CoolTrayIcon是个不错的选择,不过这里也给出简单实现,方便初学者学习。
这里给出实际的例子程序代码,只在form窗体上增加2个默认按钮
1、需要包含shellapi
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, shellapi, Menus;
const
WM_TaskbarIconCallBack=WM_USER+78; //托盘图标返回消息
type
TForm1 = class(TForm)
Button1: TButton;
PopupMenu1: TPopupMenu;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure TaskIcon_add(TitleName: String;ToolPopupMenu_Left,ToolPopupMenu_Right: TPopupMenu);
procedure Button2Click(Sender: TObject);
procedure nihao1Click(Sender: TObject);
procedure TrayMsg(var Msg: TMessage);message WM_TaskbarIconCallBack;
private
{ Private declarations }
PNotify : PNotifyIconDataA; //义托盘图标结构
public
{ Public declarations }
Protected
FPopupMenu_Left,FPopupMenu_Right: TPopupMenu; //义托盘图标结构
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{**********************************************
author/date:
description:给程序增加托盘
参数介绍:
TitleName:图表tip
ToolPopupMenu_Left,ToolPopupMenu_Right:点图标对应的弹出菜单
使用本函数需要包含单元
QMenus
**********************************************}
procedure TForm1.TaskIcon_add(TitleName: String;ToolPopupMenu_Left,ToolPopupMenu_Right: TPopupMenu);
begin
If Assigned(ToolPopupMenu_Left) Then
FPopupMenu_Left:=ToolPopupMenu_Left;
If Assigned(ToolPopupMenu_Right) Then
FPopupMenu_Right:=ToolPopupMenu_Right;
New(PNotify);
with PNotify^ do
begin
Wnd:=self.Handle;
uID:=0;
uFlags:=NIF_ICON+NIF_MESSAGE+NIF_TIP;//托盘的属性
hIcon:=Application.Icon.Handle; //把系统图表作为托盘
uCallbackMessage:=WM_TaskbarIconCallBack;
StrCopy(szTip, PChar(TitleName));
end;
Shell_NotifyIcon(NIM_ADD,PNotify);
end;
//增加系统图标做为托盘图标
procedure TForm1.Button1Click(Sender: TObject);
begin
TaskIcon_add(‘我是托盘‘,PopupMenu1,PopupMenu1);
end;
//释放托盘图标
procedure TForm1.Button2Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,PNotify);
end;
//托盘消息相应
procedure TForm1.TrayMsg(var Msg:TMessage);
Var
APoint : TPoint;
Begin
with Msg do
begin
if (Msg = WM_TaskbarIconCallBack) then
begin
GetCursorPos(APoint);
case LParam of
WM_LBUTTONDOWN :
begin
if Assigned(FPopupMenu_Left) Then
FPopupMenu_Left.Popup(APoint.X, APoint.Y);
end;
WM_RBUTTONDOWN :
begin
if Assigned(FPopupMenu_Right) Then
FPopupMenu_Right.Popup(APoint.X, APoint.Y);
end;
end;
end
end;
End;
// if Msg.LParam = WM_LBUTTONDBLCLK then Form1.Show;

procedure TForm1.nihao1Click(Sender: TObject);
begin
showmessage(‘我是托盘左右键菜单‘);
end;
end.
如果要实现动态托盘,可以加ontimer事件处理,用函数 Shell_NotifyIcon 动态修改托盘图标
procedure TForm1.Timer1Timer(Sender: TObject);
begin
iconindex:=iconindex+1;
if iconindex=Imagelist1.Count then iconindex:=0;
Imagelist1.GetIcon(iconindex,tempicon);
PNotify.hIcon:=tempicon.Handle;
Shell_NotifyIcon(NIM_MODIFY,@PNotify);
end;

原文地址:https://www.cnblogs.com/blogpro/p/11453422.html

时间: 2024-10-31 14:23:01

delphi 给程序加托盘图标的相关文章

第一个Delphi小程序

第一次应工作需呀,接触这个语言,今晚在自己的电脑搭建好环境,写的第一个超简单的Delphi小程序! var temp:Integer; //求个位数 procedure TForm1.BitBtn1Click(Sender: TObject); begin temp := StrToInt(Edit1.Text); Label1.Caption := IntToStr(temp Mod 10); end; //十位数 procedure TForm1.BitBtn2Click(Sender: T

用C#给程序加启动画面并只允许一个应用程序实例运行

1. 启动画面类: public class SplashForm : System.Windows.Forms.Form { private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label lbl_version; /// <summary> /// 必需的设计器变量. /// </summ

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首先我们知道32位汇编是可以调用Windows API的,那么今天我们就调用windowsAPI来写一个窗口程序 如果你有windows开发知识,那么就很理解了,如果没有,那么跟着我写,跟着步骤去写,那么也可以写出来 首先我们要编写一个窗口程序(使用SDKAPI编写)有几个步骤 1.设计窗口类 2.注

.NET程序加壳的基本原理和方式浅析

.NET程序加壳的基本原理和方式浅析 加壳程序是一种常用的保护应用程序的办法,确切的说是一种加密办法.取名为壳,意思是说这种对程序的保护办法就像植物种子的外壳,咱们运用一段程序将咱们的主程序包裹在其间,不能轻易被其他人看见. 被加壳的程序在运转时先要运转一段附加的指令,这段附加的指令完结有关操作后会发动主程序. 加壳的办法大致可分为压缩和加密. 传统的非保管程序,加壳的目标是汇编指令:对.NET程序的加壳目标则是元数据和IL代码.对.NET程序的加壳,在理论和办法上并没有啥创新,目前都是直接承继

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载四(使用程序加载事件)

在了解了PhoneGap中都有哪些事件之后,本节将开始对这些事件的用法进行详细地介绍.本节要介绍的是程序加载事件,也就是deviceready.pause和resume这3个事件. [范例4-2 程序加载事件的使用] 01 <!DOCTYPE html> 02 <html> 03 <head> 04 <meta charset="utf-8"> 05 <title>程序加载事件的使用</title> 06 <

linux 让一个程序开机自启动并把一个程序加为服务

本文以tomcat7为例 首先找到tomcat启动的目录,我的为 cd /usr/local/tomcat7/bin/ 这个目录 启动脚本是startup.sh 然后在/etc/rc.d/rc.local 这个文件中将tomcat的启动脚本添加进来即可. 重启操作系统,发现tomcat7可以开机自启动了. 将tomcat添加为服务 将 /usr/local/tomcat7/bin/catalina.sh 这个文件拷贝到 /etc/rc.d/init.d 这个目录并重命名为tomcat 使用命令

MFC程序加载DLL文件时运行到Loadlibray()语句就无法继续下去

我在学习Detour时,为了进行测试,就建立了一个DLL文件和一个MFC工程. 但是我的MFC程序加载DLL文件时运行到Loadlibray("XXX.dll")这条语句就无法继续下去,没有报错,VS2010也没有停止,还是处于编译运行状态. 可是我之前加载的别的DLL文件都可以运行,这应该是很简单的加载DLL文件的过程呀,就想是dll文件的代码错误?或是MFC工程错误?还是Dll工程错误? 于是 我就将dll内的代码 复制到原来可以运行的DLL文件中发现可以运行,那就是代码没错, 接

Delphi应用程序的调试

Delphi应用程序的调试(一) Delphi应用程序的调试(二)使用断点 Delphi应用程序的调试(三)监视变量 Delphi应用程序的调试(四)The Debug Inspector Delphi应用程序的调试(五)其他调试工具 Delphi应用程序的调试(六)步进式代码调试 Delphi应用程序的调试(七)调试DLL Delphi应用程序的调试(八)事件日志窗口和模块窗口 Delphi应用程序的调试(九)调试技术 Delphi应用程序的调试(十)调试器选项

使用SplashScreenManager控件定制程序加载页面

需要devexpress版本在12.0及以上才支持 https://www.cnblogs.com/wuhuacong/p/6112461.html 在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口 http://blog.csdn.net/archielau/article/details/37401443 ProgressPanel.WaitForm.SplashScreenManager http://blog.csdn.net/qq99