荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: georgehill (佐治·希尔【多情网虫无情网】), 信区: Program
标  题: 如何在DELPHI中使用系统状态栏图标
发信站: BBS 荔园晨风站 (Sun Mar 12 01:44:47 2000), 转信

资料整理·中国程序员网站


如何在DELPHI中使用系统状态栏图标

陆坦


----SYSTRAY ICON就是在WINDOWS 95桌面系统下边状态栏右边的区域,通常这里有输
入法和时间的小图标。程序中增加使用该功能时,须在USES中添加`SHELLAPI`。添加
图标时需要的函数是: Shell_NotifyIconA,它需要2个参数,一个参数是
`TNotifyIconDataA`的结构,该结构如下:
TNOTIFYICONDATAA = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array [0..63] of AnsiChar;
end;

----cbSize是该结构的长度;Wnd是调用Shell_NotifyIconA函数的窗口的Handle;uID
是用户自定义的一个数值,在uCallbackMessage参数指定的消息中使用;
uCallbackMessage是一个参数,当添加的图标上出现鼠标事件时,系统向Wnd参数指定
的窗口发送一个消息,该消息的Msg参数是uCallbackMessage,该消息的wParam参数是
uID,该消息的lParam参数是鼠标事件的Msg值。这样应用程序可使用几个图标,但只
用一个消息处理函数,通过wParam参数决定处理哪一个图标的消息。uFlags是该结构
中哪些项目有效,若有NIF_MESSAGE则uCallbackMessage参数是有效的;若有NIF_ICON则
hIcon参数是有效的;若有NIF_TIP则szTip参数有效。

----uCallbackMessage是发送到Wnd参数所指定的窗口的消息。hIcon是出现系统状态栏
的图标的Handle。

----szTip是当鼠标停留在系统状态栏图标上时,出现的提示。

----该结构添好后,可调用Shell_NotifyIconA函数,格式为:

Shell_NotifyIconA(dwMessage:
DWORD;lpData:PNotifyIconDataA)
dwMessage取值为
NIM_ADD:增加一个新图标
NIM_MODIFY:修改一个已有的图标
NIM_DELETE:删除一个已有的图标


----下面给出一个演示程序,该程序有两个按钮、一个弹出式菜单和一个Image构件。
一个按钮用于添加图标,一个按钮用于删除图标,Image构件内有一个图标(从Delphi
自带的图标中装入),在图标上用鼠标右键单击时,会弹出一个菜单。程序中自定义一
个消息处理函数处理系统状态栏图标消息。
--------------------------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ShellApi, ExtCtrls, Menus;

const mymsg=wm_user+1;iid=100;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
PopupMenu1: TPopupMenu;
a1: TMenuItem;
b1: TMenuItem;
c1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
procedure mymessage(var message:
tmessage);message mymsg;
public
{ Public declarations }
end;
var
Form1: TForm1;ntid:tnotifyicondataa;

implementation

{$R *.DFM}

procedure TForm1.mymessage(var message:tmessage);
var mypt:tpoint;
begin
inherited;
if message.lparam=wm_rbuttonup then begin
getcursorpos(mypt);
popupmenu1.popup(mypt.x,mypt.y);end;
message.Result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ntid.cbSize:=sizeof(tnotifyicondataa);
ntid.Wnd:=handle;
ntid.uID:=iid;
ntid.uFlags:=nif_icon+nif_tip+nif_message;
ntid.uCallbackMessage:=mymsg;
ntid.hIcon:=image1.Picture.Icon.handle;
ntid.szTip:=`asdf`;
shell_notifyicona(NIM_ADD,@ntid);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ntid.cbSize:=sizeof(tnotifyicondataa);
ntid.Wnd:=handle;
ntid.uID:=iid;
ntid.uFlags:=nif_icon+nif_tip+nif_message;
ntid.uCallbackMessage:=mymsg;
ntid.hIcon:=image1.Picture.Icon.handle;
ntid.szTip:=`asdf`;
shell_notifyicona(NIM_DELETE,@ntid);
end;

end.
--
        那你可不可以教我,
        有什么办法可以不去喜欢一个人呢?

                -- Bye 赤明莉香 --
 我是来自大富翁的小美!^_^

※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店