托盘程序的实现(delphi的消息处理函数)

我的代码如下,可是报错。。  
  const   my_message=wm_user+100;  
  ....  
  procedure   xxxx(var   msg:TMessage);   message   my_message;---这里报错。。  
  ....  
  procedure   xx(var   msg:Tmessage)  
  begin  
  ....  
  end;  
  谢谢了, 问题点数:100、回复次数:6Top

1 楼yelook(香槟酒)回复于 2003-01-16 16:54:24 得分 30

procedure   xx(var   msg:Tmessage)  
  begin  
  ....  
  end;  
  改为  
  procedure   类名.xx(var   msg:Tmessage)  
  begin  
  ....  
  end;  
  Top

2 楼xzgyb(老达摩)回复于 2003-01-16 16:57:30 得分 20

TForm1   =   class(TForm)  
  public  
    ...  
        procedure   xxxx(var   msg:TMessage);   message   my_message;  
  end;  
   
  procedure   TForm1.xxxx(var   msg:TMessage);  
  begin  
      ...  
  end;  
   
  消息处理函数必须作到一个类里面Top

3 楼cg1120(代码最优化-§惟坚韧者始能遂其志§)回复于 2003-01-16 16:57:51 得分 15

procedure   TFORM1.xx(var   msg:Tmessage)  
  begin  
  ....  
  end;  
  Top

4 楼Drate(小虫(好好学习,天天向上))回复于 2003-01-16 17:00:33 得分 35

同意楼上的:  
   
  [转帖]  
   
   
  Delphi自定义消息应用一例    
  作者:     评价:     上站日期:   2001-09-05      
  内容说明:      
  来源:      
   
  --------------------------------------------------------------------------------  
   
   
      现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标。象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结构的定义如下:    
   
  _NOTIFYICONDATAW   =   record    
  cbSize:   DWORD;    
  Wnd:   HWND;    
  uID:   UINT;    
  uFlags:   UINT;    
  uCallbackMessage:   UINT;    
  hIcon:   HICON;    
  szTip:   array   [0..63]   of   WideChar;    
  end;    
   
  TNotifyIconData   =   _NOTIFYICONDATAW;    
   
      在这个结构中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.    
  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++一样功能强大的程序来的。    
   
     
     
  Top

5 楼lanble()回复于 2003-01-16 19:04:17 得分 0

各位大哥,也是写在类里面的,(注用DELPHI6),报错信息如下:  
  unkown   directive   'message',是不是少引用了某个单元?Top

6 楼xiaole51(善良的贼)回复于 2003-02-18 16:36:17 得分 0

uses   部分是不是没引用Messages

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值