转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
组件制作之五(托盘组件)         ★★★★

组件制作之五(托盘组件)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3615 更新时间:2009/4/23 18:34:08
托盘如果处理消息,上面说到,要设置托盘结构,一定要有一个窗口句柄,才能检索托盘消息,那么这个句柄是什么呢,非可视组件没有窗口句柄呀。

 

如果你有看过TTimer的源码,一定知道这一句代码:

FWindowHandle := AllocateHWnd(WndProc);

它创建一个看不见的窗口,返回他的句柄,并指定WndProc为窗口的消息处理过程

我们何不效仿它呢。

于是也定义一个成员句柄:

FHandle: HWnd;

把该句柄赋给NOTIFYICONDATA的hWnd字段

再定义一个消息处理过程:

procedure WndProc(var Msg: TMessage);

再在组件构造函数中:

FHandle := AllocateHWnd(WndProc);

如此之后,组件就可以截获托盘的消息了,并在WndProc过程中作相应处理。这里有必要对托盘的自定义消息做一个介绍:

我们自定义了这个消息WM_TrayMsg,它的lParam与托盘的uID相同,wParam是鼠标在图标上发生的事件消息,比如单击,双击等。

我们就要把这些消息转化为事件,供给用户处理,所以定义几个事件调度函数:

//以下为事件的调度函数

    procedure DblClick; dynamic;

    procedure Click; dynamic;

    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic;

    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic;

procedure MouseMove(Shift: TShiftState; X, Y: Integer); dynamic;

意思很明显,不多说,

当然也有几个事件方法指针:

FOnIconClick: TNotifyEvent;

FOnIconDblClick: TNotifyEvent;

FOnIconMouseMove: TMouseMoveEvent;

FOnIconMouseDown: TMouseEvent;

FOnIconMouseUp: TMouseEvent;

然后在WndProc中判断消息,并调用相应的事件调度函数。看代码吧,有解释。

 

好了,三个技术解决了,第四个呢,还是等代码出来以后再加组件编辑器吧。以下是源代码:

 

unit MyTray;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls,

  Forms, Dialogs, ShellApi, ExtCtrls,StdCtrls;

 

const

//自定义托盘消息

   WM_TrayMsg=WM_USER+10;

 

type

 //恢复窗口的方式,左双击,右双击,左单击,右双击

  TRMode=(LDbClick,RDbClick,LCLick,RClick);

 

  TMyTray=class(TComponent)

  private

  //私有成员

    FIcon:TIcon;   //图标

    FDfIcon:THandle; //应用程序的默认图标

    FSetDfIcon:Boolean; //是否用应用程序的图标,如果为True,则Ficon为nil

    FIconData: TNotifyIconData;  //托盘数据结构

    isMin:Boolean;//标识是否窗口最小化了

    FHandle: HWnd;  //不可视建窗体句柄,用于处理托盘事件

    FActive: Boolean;  //是否启用托盘

    FHint: string;  //托盘提示字符串

    FRMode:TRMode; //恢复窗口的方式

    isClickIn:Boolean;//标识鼠标是否点在图标上

    OldStyleEX:longInt; //保存老的窗口风格

  //事件成员

    FOnIconClick: TNotifyEvent;

    FOnIconDblClick: TNotifyEvent;

    FOnIconMouseMove: TMouseMoveEvent;

    FOnIconMouseDown: TMouseEvent;

    FOnIconMouseUp: TMouseEvent;

  //设置方法

    procedure SetIcon(value:TIcon);

    procedure SetDfIcon(value:boolean);

    procedure SetActive(value:boolean);

    procedure SetHint(value:string);

    procedure SetRMode(value:TRMode);

  //私有方法

    procedure SetTray(Way:DWORD);  //设置托盘样式,修改,删除,增加

    function GetActiveIcon:THandle; //取得有用的图标句柄

  protected

   

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台