如何在WINDOWS托盘区实现动态图标,就像OICQ那样,

nieyongxin 2000-08-10 11:57:00
如何在WINDOWS托盘区实现动态图标,就像OICQ那样,
...全文
231 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfmich 2000-08-10
  • 打赏
  • 举报
回复
如果想用简单的方法,就下载一个TRAYICON组件,(DELPHI的即可),如果需要实现动态图标,只要加入TIMER组件,定时改变图标即可。
Nicrosoft 2000-08-10
  • 打赏
  • 举报
回复
CSDN.Net中就有这样的控件,功能很强大。为什么都要自己来实现呢?重复劳动。
fs_windy 2000-08-10
  • 打赏
  • 举报
回复
使用API函数 Shell_NotifyIcon 即可。
nieyongxin 2000-08-10
  • 打赏
  • 举报
回复
哎呀,可惜分给光了,应该多给一些给ameng007啊
ameng007 2000-08-10
  • 打赏
  • 举报
回复
使用托盘区的关键是shellapi中的TNotifyIconData和Shell_NotifyIcon涵数。
为实现动态图标,你可以在一个ImageList中准备几幅图片,在Timer事件中用ImageList
中的图片修改托盘中的图标。以下是程序示例:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellAPI,
ImgList, ExtCtrls;

const
WM_MYTRAYICONCALLBACK = WM_USER + 1000;

type

TForm1 = class(TForm)
Timer1: TTimer;
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
MyTrayIcon : TNotifyIconDataA;
IconIndex : integer;
CurrentIcon : TIcon;
procedure WMMyTrayIconCallBack(var Msg : TMessage);message WM_MYTRAYICONCALLBACK;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.WMMyTrayIconCallBack(var Msg: TMessage);
begin
case Msg.LParam of
WM_LBUTTONDBLCLK :
begin
visible := not visible;
Application.ShowMainForm := visible;
SetForegroundWindow(Application.Handle);
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
IconIndex := 0;
CurrentIcon := TIcon.Create;
ImageList1.GetIcon(IconIndex,CurrentIcon);
MyTrayIcon.cbSize := Sizeof(TNotifyIconDataA);
MyTrayIcon.Wnd := handle;
MyTrayIcon.uId := 1;
MyTrayIcon.uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
//MyTrayIcon.uCallbackMessage := WM_MYTRAYICONCALLBACK;
//MyTrayIcon.hIcon := Application.Icon.Handle;
MyTrayIcon.hIcon := CurrentIcon.Handle;
MyTrayIcon.szTip := '托盘示例程序';
if not Shell_NotifyIcon(NIM_ADD,@MyTrayIcon) then
ShowMessage('创建托盘图标失败!');

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@MyTrayIcon);
CurrentIcon.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ImageList1.GetIcon(IconIndex,CurrentIcon);
Application.Icon := CurrentIcon;
if IconIndex < 9 then
Inc(IconIndex)
else
IconIndex := 0;

MyTrayIcon.hIcon := CurrentIcon.Handle;
if not Shell_NotifyIcon(NIM_MODIFY,@MyTrayIcon) then
ShowMessage('修改托盘图标失败!');
end;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧