社区
Delphi
帖子详情
如何在程序开始运行的时候不显示,直接在任务栏上显示图标,最好提供代码,谢谢。
settingsun
2002-07-23 10:04:47
同上。
...全文
123
2
打赏
收藏
如何在程序开始运行的时候不显示,直接在任务栏上显示图标,最好提供代码,谢谢。
同上。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
szkxy
2002-07-23
打赏
举报
回复
下面以一个具体的例子,详细介绍一下利用Delphi实现系统状态栏图标的步骤和方法。
1.创建一个应用程序,在主窗体上增加一个TpopupMenu组件。并为该弹出选单组件增加选单项Exit,标题为“退出”。
2.在Uses中添加ShellAPI,因为在系统状态栏中增加图标时需调用ShellAPI中的函数Shell_NotifyIconA。该函数需要两个参数,其中一个是TnotifyIconDataA结构,需在主窗体中增加TnotifyIconDataA类型的全局变量ntida。
3.定义消息mousemsg,并编写主窗体的mousemessage消息处理函数,此函数说明在图标上用鼠标左键单击时,会打开应用程序窗口;用鼠标右键单击时,会弹出一个选单。
下面给出步骤2和3的实现代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, shellapi;
const
mousemsg = wm_user + 1; //自定义消息,用于处理用户在图标上点击鼠标的事件
iid = 100; //用户自定义数值,在TnotifyIconDataA类型全局变量ntida中使用
type
TForm1 = class(TForm)
......
private
//自定义消息处理函数,处理鼠标点击图标事件
procedure mousemessage(var message: tmessage); message mousemsg;
public
{ Public declarations }
end;
var
Form1: TForm1;
ntida: TNotifyIcondataA;
//用于增加和删除系统状态图标
implementation
{$R .DFM}
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));
end;
message.Result := 0;
end
4.编写FormCreate的代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
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;
5.编写Tform1.OnClose的代码如下:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone; //不对窗体进行任何操作
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;
6.编写Exit代码如下:
当用户点击Exit时实现完全退出应用程序。具体代码如下:
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
通过以上步骤,我们即可用Delphi轻松实现系统状态栏图标。
jackie168
2002-07-23
打赏
举报
回复
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.WindowState:= wsMinimized;
end;
一个TSR
程序
作出DOS下的屏幕保护
程序
在DOS时代,TSR(Tray Supervisor Routine)是一种特殊的软件设计,它运行在计算机的后台,通常在
任务栏
中的托盘区域
显示
图标
。TSR
程序
可以实现各种功能,包括自动执行任务、管理系统资源、监控硬件状态等。在这个...
获得本机IP地址
** **隐藏
任务栏
图标
:** 要实现从
任务栏
上隐藏功能,开发者可能在
代码
中添加了Windows API调用,如Shell_NotifyIcon(),来控制
任务栏
通知区域的
图标
可见性。用户可能需要通过菜单或者设置选项来启用或禁用这个...
QT
任务栏
图标
显示
问题
打开
程序
有时可以正确
显示
任务栏
图标
但是有时
图标
一闪而过或者
直接
显示
一片黑(底部
任务栏
的背景颜色) 2.出现原因 经测试,应该是 RC_ICONS = path/name.ico 和 setWindowIcon 设置
图标
引起的冲突 //我的问题
代码
...
不
显示
任务栏
图标
的
程序
有时候,我们希望自己的
程序
不
显示
在
任务栏
中。例如,
程序
已经在托盘里有了
图标
,如果再在
任务栏
里
显示
该
程序
的
图标
就会让用户感到很奇怪。如何让
程序
的
图标
不
显示
在
任务栏
里呢?最好的办法当然是这样的:先建一个不...
C# 实现
任务栏
图标
程序
我们这里所指的
图标
程序
是类似于在Windows中经常接触的停放在
任务栏
上,在后台运行的病毒监视,SQL服务管理器等
程序
。这些
程序
启动后形成一个
图标
停在
任务栏
上,具有以下的外观特征: 双击
图标
可打开
程序
主窗口。...
Delphi
5,927
社区成员
262,932
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章