delphi trayicon的用法
Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘

Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘学习Delphi时,使用了第3方控件CoolTrayIcon。
CoolTrayIcon 的功能很强大,能够将程序添加进托盘,省去了我们再编写代码来实现托盘。
但是在看搜CoolTrayIcon的时候,发现好多朋友在求如何让程序在启动就最小化多托盘的方法。
但是貌似都不曾成功过。
笔者摸索了一下,成功实现了。
找原因首先我们来看一下CoolTrayIcon的功能函数:根据CoolTrayIcon的使用实例来看,CoolTrayIcon提供了函数HideMainForm()。
好吧我们如果在FromCreat里面如果调用该函数会发现没有任何反应。
为什么呢?我们接着跟踪这个函数看一下它的声明:procedure TCoolTrayIcon.HideMainForm;beginif Owner is T WinControl then // Owner might be of type TServiceif Appl ication.MainForm <> nil thenbegin// Hide the form itself (and t hus any child windows)Application.MainForm.Visible := False;{ H ide application's TASKBAR icon (not the tray icon). Do this AFTE Rthe main form is hidden, or any child windows will redisplay th etaskbar icon if they are visible. }HideTaskbarIcon;end;end;好吧,我们看到这里应该知道了吧。
如果你还不知道,可以对它设置断点调试,你就会发现函数声明的语句根本就没有进去。
Delphi编程制作托盘图标步骤讲解(精)

详细步骤如下:一.新建一个应用程序:File->New Applicaton 在Interface部分定义一个消息常量:const WM_NID=WM_USER+1000; 系统规定从WM_USER 开始为用户自定义消息。
二.定义一个全局变量: NotifyIcon:TNotifyIconData,NotifyIcon是非常重要的一个变量,整个程序基本上是围着这个变量在转。
TNotifyIconData是一个记录类型,按住Ctrl键,在TNotifyIconData 双击即进入ShellAPI.pas单元。
(注:在Delphi中,这是一个非常好的对源代码进行分析的方法,源代码说明一切,你要想知道程序背后的内幕,最好的方法就是分析源代码!)此时出现了以下赋值语句: TNotifyIconData = TNotifyIconDataA,这个意思很明显,就是说TNotifyIconData和TNotifyIconDataA是同种数据类型,接着往下看有: TNotifyIconDataA = _NOTIFYICONDATAA,意思与刚才的一样,再往下看: type _NOTIFYICONDATAA = record cbSize: DWORD; Wnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array [0..63] of AnsiChar; end; 这可真是“千呼万唤始出来,犹抱琵琶半遮面”。
现在大家很清楚了,我们刚才定义的全局变量NotifyIcon其实是一个包含有7个成分的记录类型变量,就相当于C/C++中的结构体变量(C/C++的程序员应该是再熟悉不过了)。
下面我们逐个来解释记录类型中的7个部分各有什么功能。
1> cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData可以取得,如果你是一个熟练的C/C++程序员,你应该不会陌生。
trayicon 句柄

trayicon句柄在Windows操作系统中,系统托盘图标(System Tray Icon)是应用程序以图标形式显示在任务栏通知区域(也称为系统托盘)的一种方式。
每个托盘图标都有一个与之相关的窗口句柄(Handle),开发者可以使用这个句柄与该图标进行交互操作。
在Windows平台上,要获取系统托盘图标的句柄,通常需要使用一些编程语言(如C++、C#等)和相关的系统调用来实现。
下面是一个使用C#获取系统托盘图标句柄的示例:using System;using System.Runtime.InteropServices;class Program{[DllImport("user32.dll",SetLastError=true)]private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);[DllImport("user32.dll",CharSet=CharSet.Auto)]private static extern IntPtr SendMessage(IntPtr hWnd,uint Msg,IntPtr wParam,IntPtr lParam);private const int WM_GETICON=0x7F;private const int ICON_SMALL=0;private const int ICON_BIG=1;static void Main(){IntPtr taskBarHandle=FindWindow("Shell_TrayWnd",null);if(taskBarHandle!=IntPtr.Zero){IntPtrsysTrayHandle=FindWindowEx(taskBarHandle,IntPtr.Zero,"TrayNotifyWnd", null);if(sysTrayHandle!=IntPtr.Zero){获取系统托盘中小图标的句柄IntPtriconHandle=SendMessage(sysTrayHandle,WM_GETICON,(IntPtr)ICON_SMALL,In tPtr.Zero);Console.WriteLine("SystemTrayIconHandle:"+iconHandle.ToString()); }}}}这段代码使用了FindWindow和SendMessage等函数来定位系统托盘窗口及其子窗口(包括托盘图标),并获取小图标的句柄。
DELPHI常用控件属性设置说明

常用DELPHI控件属性设置说明目录TForm Class (1)TPanel组件 (4)TToolBar Class (5)TToolButton Class (8)TTimer Class (8)TADOConnection Class (8)TADOQuery Class (10)TADODataSet Class (10)TDBGrid Class (11)TADOStoredProc Class (12)TButton Class (13)TBitBtn Class (13)TComboBox Class (13)TStaticText Class (14)TLabel Class (14)TEdit Class (15)TGroupBox Class (15)TRadioGroup Class (15)TListbox Class (15)TTreeView Class (16)TDataModule Class (17)VC++使用串口 (17)I. Open (18)II. Configuration (19)III. Read (20)IV. Write (21)V. Close (22)Conclusion (22)License (22)TForm ClassTForm代表一个标准的应用程序窗口。
在设计阶段,当你在窗体设计器内创建窗体时,他们作为窗体类的子节点被执行。
窗体能代表应用程序的主窗口,或者对话框,或MDI的children。
一个窗体能包含其它对象,如TButton, TCheckBox和TComboBox对象等。
ArrangeIcons:安排最小化MDI子窗体的图标;Cascade:排列MDI子窗体,使他们重叠;Next:激活在窗体队列中的下一个子窗体;Previous:激活在窗体队列中的前一个MDI子窗体;Title:排列MDI子窗体,使他们都是一样的大小。
Action:指定与控件有关的活动;ActiveControl:指定以窗体为焦点的控件;Align:控件如何停靠在容器(父控件)中;AlphaBlend:指定窗体是否透明;AlphaBlendValue:指定一个透明窗体的半透明度;Anchors:指定控件如何固定到其父控件上;AutoScroll:如果窗口不足以显示它内部的所有控件时,滚动条是否自动显示在滚动窗口控件中;AutoSize:指定控件是否自动调节其大小去容纳自身内容;BiDiMode:指定控件的双向风格;BorderIcons:指定显示在窗体标题栏的图标;BorderStyle:指定窗体边框的外表和行为;BorderWidth:指定控件边框的宽度;Caption:指定用户辨别控件的文本字符串;ClientHeight:指定窗体客户区域的高度(像素);ClientWidth:指定窗体客户区域的宽度(像素);Clore:指定控件的背景色;Constraints:指定控件的尺寸约束。
在DELPHI中实现系统托盘图标

p o eu e cn n 1 c v r e sg r c d r I o O C i k( a m s a e: T s a e : m s a e Me s g ) e sg
我们知道 ,W d w i o s是基于消息处理机制的操作系统 。任何一个动 n
作都是通过对 消息的处理来实现的 ,而该动作 的接 收者是一个控件,例
责任奠羹 ,陈康宁
来稿请寄:d v lp r c ir u .o e e oe O b go p cr n
如 鼠 单击 ,按钮按下等等 ,一个动作就产 生一条或者多条消息 ,通过 标
f to  ̄c inS id ( n 呻 } :埘 : h 呷 :Itgr :B O ;sda l 澌试 } n ee) OL tcl ;
M C N VN ; II [E E T I
/ 响应图标上的鼠标事件 /
该函数的声明指 出,该过程是 一个事件 ,当产 生事件 的发生者 是图标 时,就调 用该 函数来处理 事件 。
T o iy cn a a = rc r N t f I o D tA eo d
c Si e : I R b z  ̄O D: V d :H N h l W D: uD :UN : I I T u lg :UN : Fas I T
e nd:
不足的是 ,在状态指示区显示应用程序图标 的同时,任务切
换区也存在此应用程序的按钮,怎么让它不出现在任务切换
区上呢 ?这里又要提到一个系统调用 So W n o ,它的说明 h w id w
如下 ( 自D lh 的 S u c \T \ I \ idw .a 文件 ) 摘 ep i o r e RL W Nw n o sp s :
delphi托盘窗体编程

在Delphi 7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI 文件定义的TNotifyIconData 结构体是比较早的版本。
定义如下:123456789 _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.窗体单元文件代码如下:010203040506070809101112131415 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;16171819202122232425262728293031323334353637383940414243444546474849505152535455565758procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure mniN1Click(Sender: TObject);privateprocedure WMTrayMsg(var Msg: TMessage);message WM_TRAYMSG; //声明托盘消息procedure WMSysCommand(var Msg: TMessage);message WM_SYSCOMMAND;public{ Public declarations }end;varForm1: TForm1;NotifyIcon: TNotifyIconData; //定义托盘图标结构体implementation{$R *.dfm}{------------------------------------------------------------------------------- Description: 窗体创建时,即创建托盘-------------------------------------------------------------------------------} procedure TForm1.FormCreate(Sender: TObject);beginwith NotifyIcon dobegincbSize := 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);beginShell_NotifyIcon(NIM_DELETE,@NotifyIcon);end;{------------------------------------------------------------------------------- Description: 截获窗体最小化消息,最小化到托盘-------------------------------------------------------------------------------}596061626364656667686970717273747576777879808182838485868788899091 procedure TForm1.WMSysCommand(var Msg: TMessage);beginif Msg.WParam = SC_ICON thenSelf.Visible := FalseelseDefWindowProc(Self.Handle,Msg.Msg,Msg.WParam,Msg.LParam);end;{------------------------------------------------------------------------------- Description: 自定义的托盘消息-------------------------------------------------------------------------------} procedure TForm1.WMTrayMsg(var Msg: TMessage);varp: TPoint;begincase Msg.LParam ofWM_LBUTTONDOWN: Self.Visible := True; //显示窗体WM_RBUTTONDOWN:beginSetForegroundWindow(Self.Handle); //把窗口提前GetCursorPos(p);pm1.Popup(p.X,p.Y);end;end;end;{------------------------------------------------------------------------------- Description: 测试菜单项-------------------------------------------------------------------------------} procedure TForm1.mniN1Click(Sender: TObject);beginShowMessage('One');end;end.4.运行结果如下:参考MSDN(/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结束的字符串的指针。
Delphi常用技巧帮助

Delphi常用技巧帮助| 留言交流| 登录Delphi常用技巧在网上行走时,经常会看到弹出的桌面小窗体,有时做广告,有时向你致以节日的问候;人们称其为桌面小精灵;有的桌面小精灵会自动移动,有的固定在屏幕的某一角落,动画闪烁,煞是迷人。
本人用Delphi制作了一款桌面小精灵,愿与大家共享。
桌面小精灵的实现功能:当运行时,在屏幕的左下角显示一无边框、无标题栏的小窗体,并自动向屏幕的右上角移动,窗体上的小精灵——可爱的马先生,一会跃起,高呼“马到成功!”,一会含情脉脉地向你招手“再见”;同时,还不断地闪烁显示当前时间,时刻提醒你抓紧时间呦!当你嫌它碍事时,你可以按下鼠标左键,将它拖到任意位置。
如果你厌烦它不停移动,你可以双击鼠标左键,它会老老实实地呆在原地不动,只要你用鼠标轻轻一点,它又会高高兴兴地上路,当你单击“再见”时,桌面小精灵就会消失,你不想一试身手吗?请跟我来!运行后效果图生成一窗体,设置窗体属性如下:Name属性为Form1,BorderStyle属性为bsNone,FormStyle 属性为StyOnTop,Height属性值240,Width属性值209。
窗体上分别添加组件,设置属性如下:(1)添加两个Image组件,Name属性分别设为Image1、Image2,Align属性均设为alClient(以使Image组件充满整个窗体),Image1的Enabled为False,Image2的Enabled为True,然后通过Picture属性为Image1、Image2添加图片(适合的图片格式:BMP、JPG )。
(2)在Image上再添加两个Timer组件,Name属性分别为Timer1、Timer2,Enabled属性均为True,Interval属性均为1000毫秒。
(3)在Image上再添加一个Label组件,Name:=Label1,Caption:=“马到成功!”,Enabled:=True,Font属性为“华文行楷,粗斜体,三号字,红色”(根据你的图片设置适当的字体、字号、字体颜色)。
利用Delphi全面控制Windows任务栏

利用Delphi全面控制Windows任务栏使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块任务栏。
从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始按钮、应用程序切换区(Application Switch Bar)、任务栏通知区(Notification Area)以及任务栏时钟。
与其它Windows应用程序相同,任务栏程序()由几个不同的窗体组成,这些窗体是具有各自的窗口类名、显示方式等信息。
因此,只要得到有关窗口信息,即可通过编程全面控制Windows任务栏的不同区域。
编程思想任务栏窗体的窗口信息为:任务栏的窗口类名是:ShellTrayWnd。
开始按钮的窗口类名是:Button。
应用程序切换区的窗口类名是:ReBarWindow32。
任务栏通知区的窗口类名是:TrayNotifyWnd。
任务栏时钟的窗口类名是:TrayClockWClass。
调用FindWindow函数得到任务栏的窗口句柄。
调用FindWindowEx函数得到任务栏各子区域的窗口句柄。
根据窗口句柄,调用ShowWindow函数控制任务栏各区域显示或隐藏(show/hide);调用En ableWindow函数控制任务栏各区域有效或无效(enabled/disabled)。
编程方法在 IDE中新建工程Project1, Project1中包含Form1, 窗体如下图所示(2)定义窗口句柄数组:Wnd:array[0..4]过程代码得到Tray Bar 的窗口句柄;[0]:=FindWindow(′ShellTrayWnd′,ni 得到开始按钮的窗口句柄;[1]:=FindWindow(′ShellTrayWnd′,ni[1]:=FindWindowEx(Wnd[1]得到应用程序切换区的窗口句柄;[2]:=F indWindow(′ShellTrayWnd′,ni[2]]:=FindWindowEx(Wnd[2],HWND(0),′ReBarWindow32′,nil);得到任务栏通知区的窗口句柄;[3]:=FindWindow(′ShellTrayWnd′,ni [3]:=FindWindowEx(Wnd [3],HWND(0),′TrayNotifyWnd′,nil);得到任务栏时钟的窗口句柄;[4]:=FindWindow(′ShellTrayWnd′,n i [4]:=FindWindowEx(Wnd [4],HWND(0),′TrayNotifyWnd′,nil);[4]:=FindWindowEx(Wnd[4],HWND(0),′TrayCLockWClass′,nil ;过程代码EnableWindow(Wnd[0]EnableWindow(Wnd[1]EnableWindow(Wnd[2]EnableWindow(Wnd[3]EnableWindow(Wnd[4][0]EnableWindow(Wnd[1]EnableWindow(Wnd[2]EnableWindow(Wnd[3]EnableWindow(Wnd[4],过程代码ShowWindow(Wnd[0]ShowWindow(Wnd[1]ShowWindow(Wnd[2]ShowWindow(Wnd[3]ShowWindow(Wnd[4]ShowWindow(Wnd[0]ShowWindow(Wnd[1]ShowWindow(Wnd[2]ShowWindow(Wnd[3]ShowWindow(Wnd[4](6)FormClose事件代码//将Windows任务栏恢复到正常状态;(Sender:TObject; var Action:[i]wWindow(Wnd[i]按F9运行程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Delphi是一种强大的编程语言,用于开发Windows应用程序。
其中,TrayIcon是Delphi中用于在系统托盘中添加图标的组件。
使用TrayIcon组件可以让应用程序在最小化时仍然在系统托盘中显示图标,并可以向用户发送通知和消息。
以下是如何在Delphi中使用TrayIcon组件的步骤:
1.添加TrayIcon组件在Delphi中,首先需要在表单上添加TrayIcon组件。
可以通过拖拽
工具箱中的TrayIcon组件到表单上,或者使用代码动态创建。
2.配置TrayIcon属性添加完TrayIcon组件后,需要设置其属性,例如:
3.Icon:设置要在系统托盘中显示的图标。
可以是一个图像资源或一个外部文件的路径。
4.PopupMenu:设置右键单击图标时要显示的快捷菜单。
可以自定义一个弹出菜单,也可
以使用系统默认的弹出菜单。
5.ShowInfoWnd:设置是否显示一个消息窗口,当用户将鼠标悬停在图标上时显示有关应
用程序的信息。
6.编写事件处理程序当用户与TrayIcon交互时,例如单击图标或右键单击弹出菜单时,
需要编写事件处理程序来响应用户的操作。
例如,当用户单击图标时,可以最小化应用程序窗口并将其添加到系统托盘中。
当用户右键单击弹出菜单时,可以显示一个自定义的上下文菜单。
7.显示和隐藏TrayIcon 在应用程序启动时,需要显示TrayIcon。
当应用程序最小化或关闭
时,需要隐藏TrayIcon。
可以使用以下代码来显示和隐藏TrayIcon:
显示TrayIcon:TrayIcon1.Visible := True;
隐藏TrayIcon:TrayIcon1.Visible := False;
以上是使用Delphi中的TrayIcon组件的基本步骤。
通过这些步骤,您可以轻松地将应用程序添加到系统托盘中,并使用弹出菜单和消息窗口与用户进行交互。