实现一个关闭所有系统托盘图标但又不影响程序正常运行的软件该如何做。
解决方案 »
- 請幫忙看下代碼
- C/S结构非法关机问题
- 本人有2年的delphi开发经验,现在想转C#,各位有什么好的途径指点一下
- 请问如何使用delphi7开发类似于outlook邮件通知功能的小窗口
- 本人新手,有N多问题要求助!!!
- 推荐一个我认为最好的,最方便的报表控件
- 我在用Delphi7时,不想让菜单显示加速字符,可是程序运行后总是自动加上加速字符,又没办法去掉,请教高手怎么解决?
- listview中checkboxes设为true之后,每项checkbox被选中的事件是哪一个?
- @_@ 没有可用分了
- 如何自定义StringGrid中的对齐方式为居中 & 如何动态改变单个Cell的背景色和字体颜色?
- 怎样才能写出动态的滚动条?
- 自定义消息处理问题
var
aa:hwnd;
begin
aa:=FindWindowEx(findwindow('shell_traywnd',nil),0,'traynotifywnd',0);
showwindow(aa,SW_HIDE);
end;
结贴:)
第二,先定义一个本单元的图标变量MY_Icon,并定义为TNotifyIconDataA类型(最好设置成全局变量)
第三,加载Icon:
private
{ Private declarations }
//失效的图标
DisableIcon:TIcon;
//装载图标
procedure InstallIcon;procedure TForm1.InstallIcon;
begin
//加载并允许使用Application状态的图标
with MY_Icon do
begin
//定义图标尺寸
cbSize :=SizeOf(MY_Icon);
//得到主窗口句柄
Wnd :=Handle;
//内部标识
uID :=ICON_ID;
//指明有效字段
uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
//回调函数消息
uCallBackMessage:=MI_ICONEVENT;
//加入form图标句柄
hIcon :=Application.Icon.Handle;
//鼠标在图标上时的提示信息
szTip :='程序运行中!';
end;
//装载图标
Shell_NotifyIconA(NIM_ADD,@MY_Icon);
end;
第四,卸载icon
private
{ Private declarations }
//失效的图标
DisableIcon:TIcon;
//卸载图标
procedure UnInstallIcon;//卸载图标的过程
procedure TForm1.UnInstallIcon;
begin
with MY_Icon do
begin
cbSize:=SizeOf(MY_Icon);
Wnd :=Handle;
uID :=ICON_ID;
end;
//删除图标
Shell_NotifyIcon(NIM_DELETE,@MY_Icon);
end;
第五,安装:
procedure TForm1.FormCreate(Sender: TObject);
begin
//安装图标
InstallIcon;
//在任务栏上不显示程序图标
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);//可选
end;
第七,初始化用户常量
const
//ICON的ID标志
ICON_ID=1;
//自定义ICON单击事件消息
MI_ICONEVENT=WM_USER+1;
第八,单击操作
private
{ Private declarations }
//图标区自定义事件的过程以及消息声明
procedure IconOnClick(var message:TMessage); message MI_ICONEVENT;procedure TForm1.IconOnClick(var message:TMessage);
var
pt:TPoint;
begin
//单击左键显示主窗口
case message.lParam of
WM_LBUTTONDOWN:
begin
ShowWindow(form1.Handle,SW_SHOW);
Application.BringToFront;
end;
//双击左键隐藏主窗口
WM_LBUTTONDBLCLK:
begin
ShowWindow(form1.Handle,SW_HIDE);
end;
//托盘区单击右键显示菜单
WM_RBUTTONDOWN:
begin
GetCursorPos(pt);
//使主窗口进入前台服务
SetForegroundWindow(form1.Handle);
PopupMenu1.Popup(pt.x,pt.y);
end;
end;
end;
第九,更改hint:
lstrcpy(MY_Icon.szTip,pchar('asdgasdgasg'+Edit1.text));
Shell_NotifyIconA(nim_Modify, @MY_Icon);
更改提示MY_Icon必需是全局变量。
Application.Terminate;
Close;
应该可以的!