• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi托盘程序实现转

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 


unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, StdCtrls, Buttons;//涉及到系统编程方面都要用到API函数

const
  WM_NID= WM_USER+1000;//系统规定从WM_USER开始为用户自定义消息。

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    NotifyIcon: TNotifyIconData;
     //定义全局变量:NotifyIcon:TNotifyIconData,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;
    procedure WMNID(var msg:TMessage); message WM_NID;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  with NotifyIcon do
   begin
    cbSize:=SizeOf(TNotifyIconData);
    Wnd:= Handle;
    uID:= 1;
    uCallbackMessage:= WM_NID;
    uFlags:= NIF_ICON or NIF_MESSAGE or NIF_TIP;
    hIcon:= Application.Icon.Handle;
    szTip:= 'MET';
    //1> cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData)可以取得。在C/C++中通过 SizeOf(Struct type) 来获知存放一个这样的结构体变量要多少内存。
    //2> 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就是当你的鼠标放到任务栏托盘的小图标上的时候弹出来的提示信息?
   end;
   Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
end;

procedure TForm1.WMNID(var msg:TMessage);
begin
  case msg.LParam of
    WM_LBUTTONUp: Form1.Visible:=not Form1.Visible;
    WM_RBUTTONUP: ShowMessage('您点击的是右键');
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);//释放掉建立的托盘程序,否则会占用系统资源
end;
end.


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi面向对象继承窗体发布时间:2022-07-18
下一篇:
Delphi7JustInTimedebugger与VS冲突发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap