如何动态改变Windows右下角程序图标? 我做了一个程序想实现跟QQ类似的动态改变右下角图标,请高手帮忙!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TForm1.Timer1Timer(Sender: TObject);begin case (iconcount) of 0: icondata.hIcon :=loadicon(0, idi_application); 1: icondata.hIcon :=loadicon(0, idi_asterisk); 2: icondata.hIcon :=loadicon(0, idi_exclamation); 3: icondata.hIcon :=loadicon(0, idi_hand); 4: icondata.hIcon :=loadicon(0, idi_question); 5: icondata.hIcon :=application.Icon.Handle ; end; inc(iconcount); if iconcount>5 then iconcount:=0; application.Title :=timetostr(now); strpcopy(icondata.szTip ,application.Title ); shell_notifyicon(nim_modify,@icondata);end; 完整的:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Menus, shellapi;type TForm1 = class(TForm) PopupMenu1: TPopupMenu; Timer1: TTimer; open1: TMenuItem; exit1: TMenuItem; procedure FormCreate(Sender: TObject); procedure open1Click(Sender: TObject); procedure exit1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Timer1Timer(Sender: TObject); private procedure wndproc(var msg:tmessage);override; { Private declarations } public icondata:tnotifyicondata; iconcount:integer; { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure tform1.wndproc(var msg:tmessage);var p:tpoint;begin case msg.msg of wm_user+1: case msg.LParam of wm_rbuttondown: begin getcursorpos(p); popupmenu1.Popup(p.X,p.Y); end; WM_LBUTTONDBLCLK: begin form1.Show; showwindow(application.Handle ,sw_hide); end; end; end; inherited;end;procedure TForm1.FormCreate(Sender: TObject);begin bordericons:=[bisystemmenu]; iconcount:=0; icondata.cbSize :=sizeof(icondata); icondata.Wnd :=handle; icondata.uID:=100; icondata.uFlags :=nif_message+nif_icon+nif_tip; icondata.uCallbackMessage :=wm_user+1; icondata.hIcon :=application.Icon.Handle ; strpcopy(icondata.szTip,application.Title ); shell_notifyicon(nim_add,@icondata); timer1.Interval :=1000; timer1.Enabled :=true;end;procedure TForm1.open1Click(Sender: TObject);begin form1.Show; showwindow(application.Handle ,sw_hide);end;procedure TForm1.exit1Click(Sender: TObject);begin shell_notifyicon(nim_delete,@icondata); application.ProcessMessages ; application.Terminate ;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin action:=canone; form1.Hide ;end;procedure TForm1.Timer1Timer(Sender: TObject);begin case (iconcount) of 0: icondata.hIcon :=loadicon(0, idi_application); 1: icondata.hIcon :=loadicon(0, idi_asterisk); 2: icondata.hIcon :=loadicon(0, idi_exclamation); 3: icondata.hIcon :=loadicon(0, idi_hand); 4: icondata.hIcon :=loadicon(0, idi_question); 5: icondata.hIcon :=application.Icon.Handle ; end; inc(iconcount); if iconcount>5 then iconcount:=0; application.Title :=timetostr(now); strpcopy(icondata.szTip ,application.Title ); shell_notifyicon(nim_modify,@icondata);end;end. 有现成的控件名称:trayicon很好用的,不防试试 delphi中16进制数转换为字符串的问题,请教. dll 中的函数使用 TAdoConnection 等 Delphi 中特有的类型,会不会不太好? 我的activex没有规律的出错啊,不知道为什么,烦! 在线询问,马上给分.问文件打开问题. 设计报表打印用哪种控件比较好啊?(在线等)--50分 请问怎样在DELPHI的报表中分行显示(紧急)? 老问题,但没办法,急死我了!!!大家帮帮忙!!! 一个简单问题 Delphi SWF SDK的使用 D7中如何升级DBX 向excel里导数据 数据库操作的问题!(回答都有分!)
begin
case (iconcount) of
0: icondata.hIcon :=loadicon(0, idi_application);
1: icondata.hIcon :=loadicon(0, idi_asterisk);
2: icondata.hIcon :=loadicon(0, idi_exclamation);
3: icondata.hIcon :=loadicon(0, idi_hand);
4: icondata.hIcon :=loadicon(0, idi_question);
5: icondata.hIcon :=application.Icon.Handle ;
end;
inc(iconcount);
if iconcount>5 then
iconcount:=0;
application.Title :=timetostr(now);
strpcopy(icondata.szTip ,application.Title );
shell_notifyicon(nim_modify,@icondata);
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, shellapi;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Timer1: TTimer;
open1: TMenuItem;
exit1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure open1Click(Sender: TObject);
procedure exit1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
private
procedure wndproc(var msg:tmessage);override;
{ Private declarations }
public
icondata:tnotifyicondata;
iconcount:integer;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure tform1.wndproc(var msg:tmessage);
var
p:tpoint;
begin
case msg.msg of
wm_user+1:
case msg.LParam of
wm_rbuttondown:
begin
getcursorpos(p);
popupmenu1.Popup(p.X,p.Y);
end;
WM_LBUTTONDBLCLK:
begin
form1.Show;
showwindow(application.Handle ,sw_hide);
end;
end;
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bordericons:=[bisystemmenu];
iconcount:=0;
icondata.cbSize :=sizeof(icondata);
icondata.Wnd :=handle;
icondata.uID:=100;
icondata.uFlags :=nif_message+nif_icon+nif_tip;
icondata.uCallbackMessage :=wm_user+1;
icondata.hIcon :=application.Icon.Handle ;
strpcopy(icondata.szTip,application.Title );
shell_notifyicon(nim_add,@icondata);
timer1.Interval :=1000;
timer1.Enabled :=true;
end;procedure TForm1.open1Click(Sender: TObject);
begin
form1.Show;
showwindow(application.Handle ,sw_hide);
end;procedure TForm1.exit1Click(Sender: TObject);
begin
shell_notifyicon(nim_delete,@icondata);
application.ProcessMessages ;
application.Terminate ;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=canone;
form1.Hide ;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
case (iconcount) of
0: icondata.hIcon :=loadicon(0, idi_application);
1: icondata.hIcon :=loadicon(0, idi_asterisk);
2: icondata.hIcon :=loadicon(0, idi_exclamation);
3: icondata.hIcon :=loadicon(0, idi_hand);
4: icondata.hIcon :=loadicon(0, idi_question);
5: icondata.hIcon :=application.Icon.Handle ;
end;
inc(iconcount);
if iconcount>5 then
iconcount:=0;
application.Title :=timetostr(now);
strpcopy(icondata.szTip ,application.Title );
shell_notifyicon(nim_modify,@icondata);
end;end.
名称:trayicon
很好用的,不防试试