本例子提供了一个完整的托盘程序范例。
该程序运行时,先显示一个无边框的窗口做为闪烁窗口,然后关闭该窗口并在托盘区显示程序图标, 在图标上点右键可一个弹出菜单,包括:‘打开windows’、‘显示对话框’、‘关闭’三项。
program tray1;uses
Windows,
Forms,
Unit1 in 'Unit1.pas' {trayfrm},
Unit2 in 'Unit2.pas' {Form2};{$R *.RES}begin
Application.Initialize;
Application.ShowMainForm:=false;
Application.CreateForm(Ttrayfrm, trayfrm);
ShowWindow(Application.handle,SW_HIDE);
Application.Run;
end. unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellAPI, Menus, StdCtrls;
const
IDI_TRAYICON=WM_USER + 10;
TRAY_CALLBACK=WM_USER + 20;
type
Ttrayfrm = class(TForm)
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
Label1: TLabel;
windows1: TMenuItem;procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormActivate(Sender: TObject);
procedure windows1Click(Sender: TObject);
private
aIcon:HICON;
aIconData:TNotifyIconData;
procedure TrayCallBack(var Msg:TMessage);message TRAY_CALLBACK;
{ Private declarations }
public
{ Public declarations }end;var
trayfrm: Ttrayfrm;implementationuses Unit2;{$R *.DFM}
procedure Ttrayfrm.TrayCallBack(var Msg:TMessage);
var p:TPoint;
begin
if (Msg.LParam=WM_RBUTTONDOWN) or (Msg.LParam=WM_LBUTTONDBLCLK) then
begin
if (Msg.WParam=IDI_TRAYICON) then
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x,p.y);
end;
end;
end;
procedure Ttrayfrm.N1Click(Sender: TObject);
begin
showmessage('Very Good ! ');
end;procedure Ttrayfrm.N2Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@aIconData);
Application.ProcessMessages;
application.Terminate;
end;procedure Ttrayfrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=caNone;
hide;
end;procedure Ttrayfrm.FormActivate(Sender: TObject);
//var pData:_APPBARDATA;
begin
ShowWindow(Application.handle,SW_HIDE);
refresh;
sleepex(2000,false);
width:=0;
height:=0;
clientwidth:=0;
clientheight:=0;
aIcon:=LoadIcon(HInstance,'mainicon');
if aIcon <> NULL then
begin
aIconData.uFlags:= NIF_MESSAGE + NIF_ICON + NIF_TIP;
aIconData.uID:=UINT(IDI_TRAYICON);
aIconData.cbSize:=sizeof(TNotifyIconData);
aIconData.Wnd:=Handle;
aIconData.uCallbackMessage:=TRAY_CALLBACK;
aIconData.hIcon:=Application.Icon.Handle;
aIconData.szTip:='托盘范例程序';
Shell_NotifyIcon(NIM_ADD,@aIconData);
end;end;procedure Ttrayfrm.windows1Click(Sender: TObject);
begin
form2:=Tform2.create(self);;
form2.showmodal;
show;
showwindow(Application.handle,SW_HIDE);
end;end. unit Unit2;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm2 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.DFM}end.
该程序运行时,先显示一个无边框的窗口做为闪烁窗口,然后关闭该窗口并在托盘区显示程序图标, 在图标上点右键可一个弹出菜单,包括:‘打开windows’、‘显示对话框’、‘关闭’三项。
program tray1;uses
Windows,
Forms,
Unit1 in 'Unit1.pas' {trayfrm},
Unit2 in 'Unit2.pas' {Form2};{$R *.RES}begin
Application.Initialize;
Application.ShowMainForm:=false;
Application.CreateForm(Ttrayfrm, trayfrm);
ShowWindow(Application.handle,SW_HIDE);
Application.Run;
end. unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellAPI, Menus, StdCtrls;
const
IDI_TRAYICON=WM_USER + 10;
TRAY_CALLBACK=WM_USER + 20;
type
Ttrayfrm = class(TForm)
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
Label1: TLabel;
windows1: TMenuItem;procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormActivate(Sender: TObject);
procedure windows1Click(Sender: TObject);
private
aIcon:HICON;
aIconData:TNotifyIconData;
procedure TrayCallBack(var Msg:TMessage);message TRAY_CALLBACK;
{ Private declarations }
public
{ Public declarations }end;var
trayfrm: Ttrayfrm;implementationuses Unit2;{$R *.DFM}
procedure Ttrayfrm.TrayCallBack(var Msg:TMessage);
var p:TPoint;
begin
if (Msg.LParam=WM_RBUTTONDOWN) or (Msg.LParam=WM_LBUTTONDBLCLK) then
begin
if (Msg.WParam=IDI_TRAYICON) then
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x,p.y);
end;
end;
end;
procedure Ttrayfrm.N1Click(Sender: TObject);
begin
showmessage('Very Good ! ');
end;procedure Ttrayfrm.N2Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@aIconData);
Application.ProcessMessages;
application.Terminate;
end;procedure Ttrayfrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=caNone;
hide;
end;procedure Ttrayfrm.FormActivate(Sender: TObject);
//var pData:_APPBARDATA;
begin
ShowWindow(Application.handle,SW_HIDE);
refresh;
sleepex(2000,false);
width:=0;
height:=0;
clientwidth:=0;
clientheight:=0;
aIcon:=LoadIcon(HInstance,'mainicon');
if aIcon <> NULL then
begin
aIconData.uFlags:= NIF_MESSAGE + NIF_ICON + NIF_TIP;
aIconData.uID:=UINT(IDI_TRAYICON);
aIconData.cbSize:=sizeof(TNotifyIconData);
aIconData.Wnd:=Handle;
aIconData.uCallbackMessage:=TRAY_CALLBACK;
aIconData.hIcon:=Application.Icon.Handle;
aIconData.szTip:='托盘范例程序';
Shell_NotifyIcon(NIM_ADD,@aIconData);
end;end;procedure Ttrayfrm.windows1Click(Sender: TObject);
begin
form2:=Tform2.create(self);;
form2.showmodal;
show;
showwindow(Application.handle,SW_HIDE);
end;end. unit Unit2;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm2 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.DFM}end.
解决方案 »
- delphi 开发三层数据架构程序,客户端提示invalid data packet,请高手解答
- 0分帖子~~~
- 数据添加问题。请教!
- Delphi写的WIN32程序如何可以和C#程序互相调用!
- 退出cxGrid的某列,触发一个事件要写在哪里。
- 如何让窗体自动获得焦点?非常紧急,在线等!!!
- 据盖茨透露 .net 用delphi开发的!
- 怎么样盼断一个点是否在一个矩形内(在线等待)
- 如何将HTML转换成XML?
- 哪儿有d6的企业版下载
- 高分求一数据库(ADO+Access)基本操作如添加、删除修改的源代码,关键代码就可以了!谢谢!
- 请问各位高手,web网页中alert('程序错误!')是象windows发什么消息?(高分:100)
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellAPI;const
WM_BARICON=WM_USER+200;
type
TForm1 = class(TForm)
private
procedure WMSysCommand(var
Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var
Message:TMessage);message WM_BARICON;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.WMSysCommand
(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if Message.WParam = SC_ICON then
begin
//如果用户最小化窗口则将窗口
//隐藏并在任务栏上添加图标
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON
or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end
else
begin
//如果是其它的SystemCommand
//消息则调用系统缺省处理函数处理之。
DefWindowProc(Form1.Handle,Message.
Msg,Message.WParam,Message.LParam);
end;
//
end;procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then
begin
//如果用户点击任务栏图标则将图标删除并回复窗口。
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;end.