这个我代码里都注释得很多了,可以直接看代码,就是窗口启动后右下角有个托盘图标,但是我没对窗口让他不可视或者什么,其余大家可以自己去改
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI;
const
WM_NICLICK = WM_USER + 2012; { 托盘消息 }
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FNI: TNotifyIconData; { 托盘 }
procedure IniNotifyIconData;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.IniNotifyIconData;
begin
(*
_NOTIFYICONDATAA = record
cbSize: DWORD; 结构体的大小,以字节为单位。
Wnd: HWND; 窗口的句柄。标示的窗口用来接收与托盘标相关的消息。Shell_NotifyIcon函数调用时,hWnd和uID成员用来标示具体要操作的图标
uID: UINT; 应用程序定义的任务栏图标的标识符。Shell_NotifyIcon函数调用时,hWnd和uID成员用来标示具体要操作的图标。通过将多次调用,你可以使用不同的uID将多个图标关联到一个窗口hWnd
uFlags: UINT; 此成员表明具体哪些其他成员为合法数据(即哪些成员起作用)。此成员可以为以下值的组合:
NIF_ICON hIcon成员起作用
NIF_MESSAGE uCallbackMessage成员起作用
NIF_TIP szTip成员起作用
NIF_STATE dwState和dwStateMask成员起作用
NIF_INFO 使用气球提示代替普通的工具提示框 szInfo,uTimeout,szInfoTitle和dwInfoFlags成员起作用。
NIF_GUID 保留
uCallbackMessage: UINT; 应用程序定义的消息标示。当托盘图标区域发生鼠标事件或者使用键盘选择或激活图标时,系统将使用此标示向由hWnd
成员标示的窗口发消息。消息响应函数的wParam参数标示了消息事件发生的任务栏图标,IParam参数根据事件不同,包含
了鼠标或键盘的具体消息,例如当鼠标指针移过托盘图标时,lParam将为WM_MOUSEMOVE.
hIcon: HICON; 增加、修改或删除的图标的句柄。注意,windows不同版本对于图标有不同要求。
szTip: array [0..63] of AnsiChar; 指向一个以\0结束的字符串的指针。字符串的内容为标准工具提示的信息。包含最后的\0字符,szTip最多含有64个字符
end;
*)
with FNI do
begin
cbSize := SizeOf(FNI);
Wnd := Handle;
uID := 1;
uFlags := NIF_ICON or NIF_message or NIF_TIP;
uCallbackmessage := WM_NICLICK;//uCallbackmessage 是鼠标按下左键 也就是托盘鼠标按下左键
hIcon := Application.Icon.Handle;
szTip := '说明:' + #13 +
'1.示例;' + #13 +
'2.示例。';
end;
(*
function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall;
dwMessage为输入参数,传递发送的消息,表明哟执行的操作。可选的值如下:
NIM_ADD:向托盘区域添加一个图标。此时第二个参数lpData指向NOTIFYICONDATA结构体中的hWnd和uID成员用来标示这个图标,以便以后再次使用Shell_NotifyIcon对此图标操作
lpdata为输入参数,是指向NOTIFYICONDATA结构体的指针,结构体内容用来配合第一个参数wMessage进行图标操作
如果图标操作成果返回True,否则返回False
*)
Shell_NotifyIcon(NIM_ADD, @FNI);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
IniNotifyIconData;//开启托盘
end;
end.