现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标。象FoxMail
3.0 NetVampire
3.0等都提供了这样的功能。实现这样的功能实际上并不复杂,在窗口最小化时,窗口会发出WM_SYSCOMMAND消息,你只要需要截取Windows的WM_SYSCOMMAND消息,在窗口最小化时隐藏窗口并调用WindowsAPI函数Shell_NotifyIcon将定义的图标添加到任务栏上,Shell_NotifyIcon的函数定义是这样的:function
Shell_NotifyIcon(dwMessage:DWORD; lpData: PNotifyIconData): BOOL; stdcall;
其中的参数dwMessage指定Shell_NotifyIcon函数的操作,可以是NIM_ADD NIM_DELETE
NIM_MODIFY三个值中的一个,分别对应添加图标、删除图标、修改图标的动作。
---- 参数lpData指向的PNotifyIconData结构的定义如下:
----
在这个结构中Wnd指明所属的窗口,UCallbackMessage指明回调消息,如果指明了Wnd和
uCallbackMessage,则当用户对任务栏图标有动作(如点击图标,在图标上移动光标等)。系统都会发送uCallbackMessage消息给Wnd指定的窗口。hIcon是要添加的图标的句柄,szTip
是图标的提示行(就是当移动光标到图标上,出现的一个小黄方框内出现的文字)。消息。实现上面的功能,最主要的是要处理WM_SYSCOMMAND消息和自定义的图标消息,这些消息在Delphi中并没有相应的事件。这里就需要使用到Delphi的自定义消息处理功能来截取并处理这些消息。
----
首先看下面的程序。在执行程序之前,首先要改变Form1的Icon属性,给Form1装入一个图标,否则在任务栏上会出现一块空白。
//如果用户最小化窗口则将窗口
隐藏并在任务栏上添加图标
----
运行上面的程序,点击程序窗口标题栏上的最小化按钮,你就可以看到窗口被“最小化”成了一个任务栏图标,点击图标,窗口又会恢复原来的状态。
----
从上面的程序可以看到,Delphi的自定义消息处理功能的实现也是十分简单的,首先在Form类的Private定义中加入自定义消息处理函数的定义,定义的描述如下:
其中UserPro是用户自定义消息处理函数的名称,
WindowsMessage是Windows消息常量或自定义消息常量。
---- 然后在程序中加入消息处理函数,函数的一般格式如下:
Procedure UserClass.UserPro(Var Message:TMessage);
var
//加入定义
Begin
//加入程序语句
End;
其中UserClass是封装自定义消息处理函数的类的名称。
------------------------------------------------------------------------------------------------
最后,Delphi的自定义消息处理函数要涉及到Windows的消息的结构,在这里我就不多说了,大家可以参考Windows
API帮助和Delphi的相关帮助信息。相信大家如果掌握了Delphi的自定义消息处理函数,一定可以编写出象VB一样简洁,象C++一样功能强大的程序来的。
Delphi如何让程序最小化到任务栏截取WM
你只要需要截取Windows的WM_SYSCOMMAND消息,在窗口最小化时隐藏窗口并调用WindowsAPI函数Shell_NotifyIcon将定义的图标添加到任务栏上,Shell_NotifyIcon的函数定义是这样的:function Shell_NotifyIcon(dwMessage:DWORD; lpData: PNotifyIconData): BOOL;...
delphi如何让程序最小化到任务栏
一、将窗口最小化,代码如下:procedure TForm1.Button1Click(Sender: TObject);begin Application.Minimize;end;二、将窗口最小化,程序图标显示在任务栏的右下角(系统托盘):使用 TTrayIcon 控件即可。
在delphi中如何用程序来实现窗口的最小化?
procedure TForm1.Button1Click(Sender: TObject);begin \/\/ShowWindow(Self.Handle,SW_MINIMIZE);Application.Minimize; \/\/这句是最小化到任务栏的 end;
delphi在窗口最小化时不在任务栏
给你的程序加个TrayIcon控件(Delphi 2005以上)或者用SHELLAPI(Shell_NotifyIcon函数)加,截取WM_SYSCOMMAND消息,在最小化时隐藏窗口,点击通知区图标时,显示窗口。
Delphi 让子窗体显示在任务栏上的几种方法
这几种方法都需要重载 CreateParams 方法。声明部分 protected procedure CreateParams(var Params: TCreateParams); override;1、\/\/inherited;inherited CreateParams(Params);Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; \/\/这个好用。2、inherited CreateParams(Params);Params.WndParent := Get...
怎样用delphi实现在任务栏点击程序也无法最小化的效果?
我这个方法最简单了 点窗口,在窗口属性的BorderStyle设置为bsToolWindow bordersyle就在borderIcons旁边
请问怎样隐藏Delphi将无边框窗口最小化时缩小到左下角的标题栏…
如果不是主窗体,在以上代码的基础上,可以考虑重写消息处理程序,对不同的消息进行处理。Delphi7+Windows XP下代码如下:procedure WMSYSCOMMAND(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;procedure TForm2.WMSYSCOMMAND(var Msg: TWMSYSCOMMAND);begin \/\/当最小化时,只显示在任务栏 case msg....
如何使Delphi做的程序不显示在任务栏中
具体开发步骤:1、New->Other->Service Application 2、现在一个服务程序的框架已经搭起来了,打开Service1窗口,有几个属性说明一下:AllowPause:是否允许暂停 AllowStop: 是否允许停止 Dependencies: 设置服务的依存关系,服务的启动是否依赖于某个服务或者组 DisplayName: 在“服务”窗口显示的名称 Interact...
delphi 窗体隐藏任务栏 就要 窗体 最小化的时候 隐藏窗体?
procedure TMainForm.FormCreate(Sender: TObject);begin Systray1.Active:=True;Application.OnMinimize:=HideForm;end;procedure TMainForm.HideForm(Sender: TObject);begin self.Visible:=false;end;要是想简单点下载个abf控件里面有abfTrayIcon1这个控件 可以实现设置几个属性就可以了 ...
Delphi中怎样让另一程序不在任务栏中显示
XP下,右键任务栏-->属性-->给“隐藏不活动的图标”打上勾-->点右边“自定义”-->跳出来的窗口里有很多运行或者以前运行的程序,在程序右边有下拉框,选择总是隐藏,试试看!