Delphi自定义消息应用一例
点击次数:55 次 发布日期:2008-11-09 08:40:53 作者:源代码网
|
源代码网推荐 源代码网推荐 ---- 参数lpData指向的PNotifyIconData结构的定义如下: 源代码网推荐 源代码网推荐 _NOTIFYICONDATAW = record 源代码网推荐 cbSize: DWORD; 源代码网推荐 Wnd: HWND; 源代码网推荐 uID: UINT; 源代码网推荐 uFlags: UINT; 源代码网推荐 uCallbackMessage: UINT; 源代码网推荐 hIcon: HICON; 源代码网推荐 szTip: array [0..63] of WideChar; 源代码网推荐 end; 源代码网推荐 源代码网推荐 TNotifyIconData = _NOTIFYICONDATAW; 软件开发网 www.mscto.com 源代码网推荐 ---- 在这个结构中Wnd指明所属的窗口,UCallbackMessage指明回调消息,如果指明了Wnd和 uCallbackMessage,则当用户对任务栏图标有动作(如点击图标,在图标上移动光标等)。系统都会发送uCallbackMessage消息给Wnd指定的窗口。hIcon是要添加的图标的句柄,szTip 是图标的提示行(就是当移动光标到图标上,出现的一个小黄方框内出现的文字)。消息。实现上面的功能,最主要的是要处理WM_SYSCOMMAND消息和自定义的图标消息,这些消息在Delphi中并没有相应的事件。这里就需要使用到Delphi的自定义消息处理功能来截取并处理这些消息。 源代码网推荐 源代码网推荐 ---- 首先看下面的程序。在执行程序之前,首先要改变Form1的Icon属性,给Form1装入一个图标,否则在任务栏上会出现一块空白。 源代码网推荐 源代码网推荐 unit Unit1; 源代码网推荐 interface 源代码网推荐 uses 源代码网推荐 Windows, Messages, SysUtils, 源代码网推荐 Classes, Graphics, Controls, Forms, 源代码网推荐 Dialogs,ShellAPI; 源代码网推荐 源代码网推荐 const 源代码网推荐 WM_BARICON=WM_USER 200; 源代码网推荐 源代码网推荐 type 源代码网推荐 TForm1 = class(TForm) 源代码网推荐 private 源代码网推荐 procedure WMSysCommand(var 源代码网推荐 Message: TMessage); message WM_SYSCOMMAND; 源代码网推荐 procedure WMBarIcon(var 源代码网推荐 Message:TMessage);message WM_BARICON; 源代码网推荐 { Private declarations } 源代码网推荐 public 源代码网推荐 { Public declarations } 源代码网推荐 end; 源代码网推荐 源代码网推荐 var 源代码网推荐 Form1: TForm1; 源代码网推荐 源代码网推荐 implementation 源代码网推荐 源代码网推荐 {$R *.DFM} 源代码网推荐 procedure TForm1.WMSysCommand 源代码网推荐 (var Message:TMessage); 源代码网推荐 var 源代码网推荐 lpData:PNotifyIconData; 源代码网推荐 begin 源代码网推荐 if Message.WParam = SC_ICON then 源代码网推荐 begin 源代码网推荐 //如果用户最小化窗口则将窗口 源代码网推荐 隐藏并在任务栏上添加图标 源代码网推荐 lpData := new(PNotifyIconDataA); 源代码网推荐 lpData.cbSize := 88; 源代码网推荐 //SizeOf(PNotifyIconDataA); 源代码网推荐 lpData.Wnd := Form1.Handle; 源代码网推荐 lpData.hIcon := Form1.Icon.Handle; 源代码网推荐 lpData.uCallbackMessage := WM_BARICON; 源代码网推荐 lpData.uID :=0; 源代码网推荐 lpData.szTip := "Samples"; 源代码网推荐 lpData.uFlags := NIF_ICON 源代码网推荐 or NIF_MESSAGE or NIF_TIP; 源代码网推荐 Shell_NotifyIcon(NIM_ADD,lpData); 源代码网推荐 dispose(lpData); 源代码网推荐 Form1.Visible := False; 源代码网推荐 end 源代码网推荐 else 源代码网推荐 begin 源代码网推荐 //如果是其它的SystemCommand 源代码网推荐 消息则调用系统缺省处理函数处理之。 源代码网推荐 DefWindowProc(Form1.Handle,Message. 软件开发网 www.mscto.com 源代码网推荐 Msg,Message.WParam,Message.LParam); 源代码网推荐 end; 源代码网推荐 // 源代码网推荐 end; 源代码网推荐 源代码网推荐 procedure TForm1.WMBarIcon(var Message:TMessage); 源代码网推荐 var 源代码网推荐 lpData:PNotifyIconData; 源代码网推荐 begin 源代码网推荐 if (Message.LParam = WM_LBUTTONDOWN) then 源代码网推荐 begin 源代码网推荐 //如果用户点击任务栏图标则将图标删除并回复窗口。 源代码网推荐 lpData := new(PNotifyIconDataA); 源代码网推荐 lpData.cbSize := 88;//SizeOf(PNotifyIconDataA); 源代码网推荐 lpData.Wnd := Form1.Handle; 源代码网推荐 lpData.hIcon := Form1.Icon.Handle; 源代码网推荐 lpData.uCallbackMessage := WM_BARICON; 源代码网推荐 lpData.uID :=0; 源代码网推荐 lpData.szTip := "Samples"; 源代码网推荐 lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; 源代码网推荐 Shell_NotifyIcon(NIM_DELETE,lpData); 源代码网推荐 dispose(lpData); 源代码网推荐 Form1.Visible := True; 源代码网推荐 end; 源代码网推荐 end; 源代码网推荐 源代码网推荐 end. 源代码网推荐 ---- 运行上面的程序,点击程序窗口标题栏上的最小化按钮,你就可以看到窗口被“最小化”成了一个任务栏图标,点击图标,窗口又会恢复原来的状态。 源代码网推荐 源代码网推荐 ---- 从上面的程序可以看到,Delphi的自定义消息处理功能的实现也是十分简单的,首先在Form类的Private定义中加入自定义消息处理函数的定义,定义的描述如下: 源代码网推荐 源代码网推荐 procedure UserPro(Var Message: 源代码网推荐 TMessage):message WindowsMessage 源代码网推荐 其中UserPro是用户自定义消息处理函数的名称, 源代码网推荐 WindowsMessage是Windows消息常量或自定义消息常量。 源代码网推荐 ---- 然后在程序中加入消息处理函数,函数的一般格式如下: 源代码网推荐 源代码网推荐 Procedure UserClass.UserPro(Var Message:TMessage); 源代码网推荐 var 源代码网推荐 //加入定义 源代码网推荐 Begin 源代码网推荐 //加入程序语句 源代码网推荐 End; 源代码网推荐 其中UserClass是封装自定义消息处理函数的类的名称。 源代码网推荐 ---- 最后,Delphi的自定义消息处理函数要涉及到Windows的消息的结构,在这里我就不多说了,大家可以参考Windows API帮助和Delphi的相关帮助信息。相信大家如果掌握了Delphi的自定义消息处理函数,一定可以编写出象VB一样简洁,象C 一样功能强大的程序来的。 源代码网推荐 源代码网供稿. |
