api函数Shell_NotifyIcon ,具体情况,看win32 api帮助
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
[email protected]
[email protected]
他是我的程序中的一部分,分享一下:
**********************************************
...
MYTRAY:TNotifyIconData;
procedure WMMYTRAYCALLBACK(var MSG:TMESSAGE);message WM_MYTRAYCALLBACK;
procedure WMSysCommand(var Msg: TWMSysCommand);message WM_SYSCOMMAND;
...
procedure TfrmICBSServerMain.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=FALSE;
with MYTRAY do
begin
cbSize:=SIZEOF(TNotifyIconData);
Wnd:=Handle;
uID:=1;
uFlags:=NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
uCallbackMessage:=WM_MYTRAYCALLBACK;
hIcon:=Application.Icon.Handle;
szTip:='Server';
end;
Shell_NotifyIcon(NIM_ADD,@MYTRAY);
end;
...procedure TfrmICBSServerMain.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@MYTRAY);
end;
...
procedure TfrmICBSServerMain.WMMYTRAYCALLBACK(var MSG: TMESSAGE);
var
p:TPoint;
begin
case MSG.LParam of
WM_RBUTTONDOWN:
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x,p.y);
end;
WM_LBUTTONDOWN:
begin
Visible:=not Visible;
Application.ShowMainForm:=Visible;
SetForegroundWindow(Handle);
end;
end;
end;*********************************************
怎么样?欢呼吧!
uCallbackMessage:=WM_MYTRAYCALLBACK;我已经加了一个头文件了,是SHELL的,还有什么头文件吗,
以下语句好象通不过呀, 说不认识 WM_MYTRAYCALLBACK
uCallbackMessage:=WM_MYTRAYCALLBACK;我已经加了一个头文件了,是SHELL的,还有什么头文件吗,在下面能出现一个图标
可不能执行程序,我把它屏蔽通过编译后
WM_TRAYNOTIFY = WM_USER + 1024; //在此添加兩行
const
WM_MYTRAYCALLBACK = WM_USER + 1024; //在此添加兩行
procedure TControlE.MinImageClick(Sender: TObject);
var
Icon:TIcon;
iconpath:string; //图标文件路径
begin
iconPath:=File_path+'\Cool.ico';
listfrm.Hide;
Icon:=TIcon.Create; //Icon变量用来装入任务栏图标
Icon.LoadFromFile(iconpath);
new(pTaskBarIcon);
with pTaskBarIcon^ do //给pTaskBarIcon赋值
begin
cbSize:=sizeof(TNotifyIconData);
Wnd:=ControlE.WindowHandle;
uID:=0;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage:=WM_USER; //当在任务栏图标上发生鼠标事件时,// 向Windows发送标准消息WM_USERhIcon:=Icon.Handle;StrCopy(szTip,'酷音酷放');end;Shell_NotifyIcon(NIM_ADD,pTaskBarIcon); //给通知域添加图标ControlE.Visible:=false; //使音乐播放器窗口不可见
// inherited; //将继承Windows处理WM_SYSCOMMAND时的方法end;
这是缩小为图标,鼠标响应,弹出菜单,你自己会做了吧!
unit BarIcon;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ShellAPI, StdCtrls;
const
mousemsg = wm_user + 1; //自定义消息,用于处理用户在图标上点击鼠标的事件
iid = 100; //用户自定义数值,在TnotifyIconDataA类型全局变量ntida中使用type
TZoomAction = (zaMinimize, zaMaximize); //放缩效果常量
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
Exit: TButton;
procedure FormCreate(Sender: TObject);
procedure ExitClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
//自定义消息处理函数,处理鼠标点击图标事件
procedure mousemessage(var message: tmessage); message mousemsg;
//处理最小化事件
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND; public
{ Public declarations }
end;var
Form1: TForm1;
ntida: TNotifyIcondataA;
//用于增加和删除系统状态图标implementation{$R *.DFM}procedure ZoomEffect(theForm: TForm; theOperation: TZoomAction);
var
rcStart: TRect;
rcEnd: TRect;
rcTray: TRect;
hwndTray: hWnd;
hwndChild: hWnd;
begin
{ 寻找系统托盘区的位置}
hwndTray := FindWindow('Shell_TrayWnd', nil);
hwndChild := FindWindowEx(hwndTray, 0, 'TrayNotifyWnd', nil);
GetWindowRect(hwndChild, rcTray);{点击用于最大化/最小化,并切换起始/结束}
if theOperation = zaMinimize then
begin
rcStart := theForm.BoundsRect;
rcEnd := rcTray;
end
else
begin
rcEnd := theForm.BoundsRect;
rcStart := rcTray;
end;{ 以下是关键的部分... }
DrawAnimatedRects(theForm.Handle, IDANI_CAPTION, rcStart, rcEnd)
end;procedure TForm1.WMSysCommand(var Message: TMessage);
begin
if Message.WParam = SC_ICON then //最小化了
begin
close;
end
else
inherited;
end;procedure TForm1.mousemessage(var message: tmessage);
var
mousept: TPoint; //鼠标点击位置
begin
inherited;
if message.LParam = wm_rbuttonup then //用鼠标右键点击图标
begin
getcursorpos(mousept); //获取光标位置
popupmenu1.popup(mousept.x, mousept.y);
//在光标位置弹出选单
end;
if message.LParam = wm_lbuttonup then //用鼠标左键点击图标
begin
//显示应用程序窗口
// ShowWindow(Handle, SW_SHOW);
//在任务栏上显示应用程序窗口
//ShowWindow(Application.handle, SW_SHOW);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
not (GetWindowLong(Application.handle, GWL_EXSTYLE)
or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW));
hide;//起到动态效果
show;
end;
message.Result := 0;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone; //不对窗体进行任何操作
ZoomEffect(Self, zaMinimize); //进行放缩
ShowWindow(Handle, SW_HIDE); //隐藏主窗体
//隐藏应用程序窗口在任务栏上的显示
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.handle, GWL_EXSTYLE)
or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);end;procedure TForm1.FormCreate(Sender: TObject);
begin
//不在任务栏中出现
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
ntida.cbSize := sizeof(tnotifyicondataa); //指定ntida的长度
ntida.Wnd := handle; //取应用程序主窗体的句柄
ntida.uID := iid; //用户自定义的一个数值,在uCallbackMessage参数指定的消息中使
ntida.uFlags := nif_icon + nif_tip + nif_message;
//指定在该结构中uCallbackMessage、hIcon和szTip参数都有效
ntida.uCallbackMessage := mousemsg;
//指定的窗口消息
ntida.hIcon := Application.Icon.handle;
//指定系统状态栏显示应用程序的图标句柄
ntida.szTip := 'Icon';
//当鼠标停留在系统状态栏该图标上时,出现该提示信息
shell_notifyicona(NIM_ADD, @ntida);
//在系统状态栏增加一个新图标
end;procedure TForm1.ExitClick(Sender: TObject);
begin
//为ntida赋值,指定各项参数
ntida.cbSize := sizeof(tnotifyicondataa);
ntida.wnd := handle;
ntida.uID := iid;
ntida.uFlags := nif_icon + nif_tip + nif_message;
ntida.uCallbackMessage := mousemsg;
ntida.hIcon := Application.Icon.handle;
ntida.szTip := 'Icon';
shell_notifyicona(NIM_DELETE, @ntida);
//删除已有的应用程序图标
Application.Terminate;
//中断应用程序运行,退出应用程序
end;procedure TForm1.FormShow(Sender: TObject);
begin
ZoomEffect(Self, zaMaximize); //进行放缩
end;
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]