Delphi托盘编程实战演练

2016-01-29 14:27 24 1 收藏

Delphi托盘编程实战演练,Delphi托盘编程实战演练

【 tulaoshi.com - Delphi 】

  在Delphi中涉及到系统编程的方面毫无例外都要调用API函数,在ShellAPI.pas单元中有要用到的API函数的原型。

  实战演练:

  一.新建一个应用程序:File->New Applicaton 在Interface部分定义一个消息常量:const WM_NID=WM_USER+1000; 系统规定从WM_USER开始为用户自定义消息。

  二.定义一个全局变量: NotifyIcon:TNotifyIconData,NotifyIcon是非常重要的一个变量,整个程序基本上是围着这个变量在转。TNotifyIconData是一个记录类型,按住Ctrl键,在TNotifyIconData 双击即进入ShellAPI.pas单元。(注:在Delphi中,这是一个非常好的对源代码进行分析的方法,源代码说明一切,你要想知道程序背后的内幕,最好的方法就是分析源代码!)此时出现了以下赋值语句:

  TNotifyIconData = TNotifyIconDataA,这个意思很明显,就是说TNotifyIconData和TNotifyIconDataA是同种数据类型,接着往下看有:

TNotifyIconDataA = _NOTIFYICONDATAA,意思与刚才的一样,再往下看:

type

_NOTIFYICONDATAA = record

cbSize: DWORD;

Wnd: HWND;

uID: UINT;

uFlags: UINT;

uCallbackMessage: UINT;

hIcon: HICON;

szTip: array [0..63] of AnsiChar;

end;
  这可真是“千呼万唤始出来,犹抱琵琶半遮面”。现在大家很清楚了,我们刚才定义的全局变量NotifyIcon其实是一个包含有7个成分的记录类型变量,就相当于C/C++中的结构体变量(C/C++的程序员应该是再熟悉不过了)。下面我们逐个来解释记录类型中的7个部分各有什么功能。

  1> cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData)可以取得,如果你是一个熟练的C/C++程序员,你应该不会陌生。在C/C++中,每当要为一个结构体变量分配内存的时候都要:通过 SizeOf(Struct type) 来获知存放一个这样的结构体变量要多少内存。

  2> Wnd是一个句柄,你希望托盘程序产生的消息有哪个窗体来处理就让Wnd指向那个窗体。

  例如:你准备在任务栏的托盘小图标上单击时窗体是窗体在“显示”和“隐藏”之间切换,则把Wnd指向主窗体。

  3> uID:如果你要创建多个托盘小程序,那么怎么区分它们呢?就是靠这个ID号来区分。

  4> uFlags是一个标志位,它表示当前所创建的托盘程序具有哪些性质:

   NIF_ICON 表示当前所设置的图标(即hIcon的值)是有效的

   NIF_MESSAGE 表示当前所设置的系统消息(即uCallBackMessage的值)是有效的

   NIF_TIP 表示当前所设置的提示条(即szTip的值)是有效的。

  5> uCallBackMessage这是7个部分里面最重要的一个。这里指定一个回调消息,也就是说这里定义一个消息名,当你单击或者右击托盘图标的时候就会向你在Wnd所指向的窗体发送一个在uCallBackMessage中定义的消息名,然后你在程序中定义一个消息出来函数来处理这个消息。这样就把Windows关于消息的整套流程都处理好了。

  6> hIcon为托盘图标的句柄,根据这个句柄你就可以增加、修改、删除图标。

  7> szTip就是当你的鼠标放到任务栏托盘的小图标上的时候弹出来的提示信息。

  在这里我花了大量的笔墨介绍TNotifyIconData的内幕,把这部分搞清楚了,后面的东西就顺理成章了。

来源:http://www.tulaoshi.com/n/20160129/1493374.html

延伸阅读
在Delphi中使用TidIcmpClient控件可以非常简单的实现图形界面的Ping! 新建一个工程,命名为 PingGUI.dpr ,窗口命名为“frmPing”,加入如下组件:     lstReplies: TListBox;     ICMP: TIdIcmpClient;     Panel1: TPanel;     btnPing: TButton; &nbs...
SQL语言作为关系数据库管理系统中的一种通用的结构查询语言,已经被众多的数据库管理系统所采用,如ORACLE、Sybase、Informix等数据库管理系统,它们都支持SQL 语言。Delphi与使用SQL语言的数据库管理系统兼容,在使用Delphi开发数据库应用程序时,我们可以使用SQL语言编程,支持SQL编程是Delphi的一个重要特征,这也是体现Delphi作为一个...
在Delphi中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序。 本章将介绍以下内容: 1. TCanvas,TPen,TBrush,TColor对象的方法及属性; 2. ...
财务软件中总少不了大写的金额表示方式,如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它却几乎可以无限制的转换,只要你能读得出来和写得进去: function Tform1.SmallTOBig(small:real):string;var SmallMonth,BigMonth:string;wei1,qianwei1:string[2];wei,qianwei,dianweizh...
托盘程序是指这样一类程序:当程序运行后,会在系统的托盘区(也有说是状态区域)创建此程序的图标,使用者可以通过点击图标出现的菜单来控制程序的运行状态。托盘程序有很多优点,如不占屏幕,后台运行,便于控制等。所以现在越来越多的程序都做成了托盘程序。在VB.NET中,编写托盘程序是比较方便和简单的。这是因为VB.NET没有自身类库,...

经验教程

251

收藏

19

精华推荐

图解Delphi 8 Eco 开发实战

图解Delphi 8 Eco 开发实战

凤凰树上一只鹰

实例演练ASP+XML编程

实例演练ASP+XML编程

边刷边磨

delphi编程启动屏幕保护程序

delphi编程启动屏幕保护程序

AA啊啊金牛

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部