我想把一个程序左小化时变成托盘中的图标
然后,鼠标右键点击他时会弹出菜单提供必要的操作。
请问这样的功能如何实现?有没有相关的资料?
各位请帮忙!
然后,鼠标右键点击他时会弹出菜单提供必要的操作。
请问这样的功能如何实现?有没有相关的资料?
各位请帮忙!
解决方案 »
- 请教各位Delphi前辈,如果现在开始学习Delphi,应该怎么开始!
- 运行的语句不同则会提示出错
- 初学者问题:我装了DELPHI7,英文的,请问有中文的吗
- 等待按键问题?
- 请为安装一个第三方控件后程序总是提示一个错误信息?这是为什么?
- kylix2.0与1.0的注册码是否通用?谢谢
- 请问,怎么把JPG图转成BMP的,怎么把BMP转成JPG的呢,要代码
- 请问:delphi如何从中间开始访问数据库,感激不尽
- 求教: 一个简单的应用软件中各个模块之间的调用关系
- 请问大家开发是采用什么 方式?是否有采用主程序+DLL的?
- 请教:showmessage与messagebbox有什么区别
- delphi6有补丁吗?
在Shell32.DLL动态链接库中包括一个函数Shell_NotifyIconA()可通知Windows在任务条右下角加入一个小图标,可惜该函数的详细说明未收入Delphi的帮助文档中,下面以一个简单的实例来说明如果使用该函数。 unit Unit1; interface { 记住在uses部分中包括 ShellAPI}
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
ShellAPI, StdCtrls; {自定义消息,当小图标捕捉到鼠标事件时Windows向回调函数发送此消息}
{自定义消息,当小图标捕捉到鼠标事件时Windows向回调函数发送此消息}
const MY_MESSAGE = WM_USER + 100; type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormPaint(Sender: TObject);
private
procedure OnIconNotify(var Message: TMessage);
message MY_MESSAGE;
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM}
{当小图标捕捉到鼠标事件时进入此过程}
{当小图标捕捉到鼠标事件时进入此过程}
procedure TForm1.OnIconNotify(var Message: TMessage);
const
Busy: Boolean = false;
begin
if not Busy then begin
Busy := true;
if Message.LParam=WM_LBUTTONDOWN then
if Application.MessageBox('Are you sure',
'Exit', MB_YESNO)=IDYES then Close;
Busy := false;
end;
end; {当主Form建立时通知Windows加入小图标}
procedure TForm1.FormCreate(Sender: TObject);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.Wnd := Handle; // 主窗口句柄
nid.uID := -1; // 内部标识,可设为任意数
nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指?
nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指?nid.szTip := 'This is a test application'; // 提示字符串
nid.uCallbackMessage := MY_MESSAGE; // 回调函数消息
nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有?if not Shell_NotifyIcon(NIM_ADD, @nid) then begin
ShowMessage('Failed!');
Application.Terminate;
end;
{将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end; {程序被关闭时通知Windows去掉小图标}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.uID := -1; //内部标识,与加入小图标时的数一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
end; {主窗口初始化完毕并显示时将激活Paint重画事件,此时将主窗口隐藏}
procedure TForm1.FormPaint(Sender: TObject);
begin
Hide;
end; end. 上例中将程序的图标放在任务条右下角,然后隐藏自身,当用户移动鼠标至该图标上时会看到提示字符串,如果单击该图标会出现一个对话框,选择Yes退出程序并清除小图标。 From http://www.netease.com/~seawave/main/frame.html
东西挺多,我得好好消化一下
感谢,欢迎大家继续关注
蜗牛:把你的元件给我吧:[email protected],谢谢
2.调Shell_NotifyIcon还可隐藏任务栏的痕迹。
procedure tform1.show
begin
showwindow(handle,sw-hide)
end;
托盘我已经实现了
只是,我加了一个菜单,鼠标右键出现(popup空件)
但,菜单出现后,我不选他,点击别的东西,菜单不能消失。
不象windows 托盘程序出现菜单后,一旦鼠标离开点击别的东西,他会自动消失
请问如何实现!??
另外,斑竹请进,请问如何给分?
为什么 procedure OnIconNotify(var Message: TMessage);
message MY_MESSAGE;
中my_message的Lparam
返回鼠标按键信息,那么Wparam,result分别代表什么
谢谢,如果有源码更谢谢