会闪动的托盘问题(50分)

  • 主题发起人 主题发起人 gadfly
  • 开始时间 开始时间
G

gadfly

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好!
我想实现一个会闪动的托盘程序,我用 Shell_NotifyIcon(NIM_MODIFY,@MyTrayIcon);
痛苦的发现一点效果都没有,如果先用NIM_DELETE,再用NIM_ADD到试可以换图标,只是动作非常之大,
整个托盘区都在闪动,气杀我也!
各位指点迷津!
谢谢!
 
用NIM_MODIFY就行了。
 
另外,还有专门的控件。我本来也想自己写一个控件的,但是没有时间,于是放弃。
我用的是别人的控件,很好。
 
把代码贴出来看看
 
贴!

踢~
 
用一个定时器来交换图标就可以了。
 
可否 给我一个闪动托盘的控件。D6的最好。谢谢。mdc@0451.com
 
MyTrayIcon.uID你有没有设?
这是TrayIcon的索引,NIM_MODIFY和NIM_DELETE都要这个值才能成功
你可以参考Builder自带的例子
 
bu yao lao liao
 
请问一下,我自已的图标为什么在任务栏下是16色,QQ的图标好cool不知怎么做
 
procedure TForm1.TrayShow(Sender: TObject);
//当点击托盘图标时显示或隐含主窗体
begin
PopupMenu1.AutoPopup:=False;
//设定 TNotifyIconData 的记录长度
MyTrayIcon.cbSize :=SizeOf(tnotifyicondata);
//确定调用程序的窗体句柄
MyTrayIcon.Wnd :=Handle;
//确定图标的 uID
MyTrayIcon.uID :=1; ////???我不知道这应该是多少!!!
//设定显示标记
MyTrayIcon.uFlags :=NIF_ICON or NIF_TIP or NIF_MESSAGE;
//用户自定义消息
MyTrayIcon.uCallbackMessage := WM_MYTRAYICONCALLBACK;
//托盘图标的句柄
//MyTrayIcon.hIcon := Application.Icon.Handle;
MyTrayIcon.hIcon := LoadIcon(0, IDI_WINLOGO);
//托盘图标的提示信息
MyTrayIcon.szTip :='定时导数据程序';
//向托盘中添加图标
Shell_NotifyIcon(NIM_ADD,@mytrayicon);

end;

procedure TForm1.WMMyTrayIconCallBack(var Msg: TMessage);
//处理点击托盘图标的事件,根据 WM_MOUSEMOVE 消息的不同情况产生不同的回应
var
CursorPos : TPoint;
begin
PopupMenu1.AutoPopup:=False;
case Msg.lParam of
//左键按下
WM_LBUTTONDOWN : begin
application.MainForm.BringToFront; //窗体置前
end;
//左键双击
WM_LBUTTONDBLCLK : begin //窗体隐含或显示
Application.MainForm.Visible := not Application.MainForm.Visible;
SetForegroundWindow(Application.Handle);
end;
//右键按下
WM_RBUTTONDOWN : begin //显示弹出菜单
GetCursorPos(CursorPos);
PopupMenu1.Popup(CursorPos.x,CursorPos.y);
end;
end//case
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Shell_NotifyIcon(NIM_DELETE, @MyTrayIcon);//删除托盘图标
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);//程序不在任务栏上显示
TrayShow(Application.MainForm);//显示图标
flag:=0;
end;

procedure TForm1.n_MainFromDispOrHideClick(Sender: TObject);
begin
if Application.MainForm.Visible then
begin
Application.MainForm.Hide;
end
else
begin
Application.MainForm.Show;
n_MainFromDispOrHide.Caption :='隐藏主窗体';
end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
ic:TICON;
begin

if flag=0 then flag:=1
else flag:=0;

ic:=TICON.Create;
ImageList1.GetIcon(flag,ic);
with MyTrayIcon do
begin
cbSize := SizeOf(tnotifyicondata);
uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
uID := 0; ///该是多少啊?
Wnd := Handle;
uCallbackMessage := WM_MYTRAYICONCALLBACK;
// hIcon :=Application.Icon.Handle ;]
hicon:=ic.Handle;
end;

Shell_NotifyIcon(NIM_MODIFY,@MyTrayIcon); ///没有任何效果!
Application.MainForm.Hide;
ic.Free;
end;

end.
 

uID := 0; ///该是多少啊?

前面是1,后面也用1,建议你设大一点,如20091如何。另外,可以定义一个常量加1获得,
具体的我得查查。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部