Delphi7如何实现QQ托盘闪动消息提示?

我已经实现闪动的效果,但是闪动时在图标上点击没有效果,源码如下,请大师帮忙解答?unitUnit1;//..........................private... 我已经实现闪动的效果,但是闪动时在图标上点击没有效果,源码如下,请大师帮忙解答?
unit Unit1;
//..........................
private
MyTrayIcon:TNotifyIcondata;
procedure WMMyTrayIconCallback(var Msg:TMessage);message WM_MYTRAYICONCALLBACK;
public
end;

var
Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.WMMyTrayIconCallback(var Msg: TMessage);
var
cursorpos:Tpoint;
begin
////////////////////////////////////////////////////////////////////////////////
// 在这里处理用户点击托盘图标事件,可以根据WM_MOUSEMOVE消息的不同情况产生不同的
// 回应,例如区别对待单击和双击等等
////////////////////////////////////////////////////////////////////////////////
case Msg.LParam of
WM_LBUTTONDOWN: //左键按下显示弹出菜单
begin
getcursorpos(cursorpos);
SetForegroundWindow(handle);
Application.ProcessMessages;
PostMessage(Application.MainForm.Handle, WM_NULL, 0, 0);
end;
WM_LBUTTONDBLCLK: //左键双击(显示程序窗体的同时,删除托盘图标)
begin

Visible:=not Visible;
Application.ShowMainForm:=Visible;
SetForegroundWindow(Application.handle);
Shell_NotifyIcon(NIM_DELETE,@MyTrayIcon); //删除托盘图标
end;
WM_RBUTTONDOWN: //右键按下显示弹出菜单
begin
getcursorpos(cursorpos);
SetForegroundWindow(handle);
Application.ProcessMessages;
PopupMenu1.Popup(cursorpos.X,cursorpos.y);
PostMessage(Application.MainForm.Handle, WM_NULL, 0, 0);
end;
end;
end;

procedure TForm1.OpenClick(Sender: TObject);
begin
Application.ShowMainForm:=Visible;
self.Show;
SetForegroundWindow(Application.handle);
Shell_NotifyIcon(NIM_DELETE,@MyTrayIcon); //删除托盘图标
end;

procedure TForm1.CloseClick(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageBox(Handle,'是否最小化到托盘?','提示',MB_YesNo)=mrYes then
begin
CanClose := false;

self.Hide;

MyTrayIcon.cbSize := SizeOf(TNotifyIconData); //TrayIconData变量的字节数
MyTrayIcon.Wnd := Handle; //主窗口句柄
MyTrayIcon.uID := 1; //内部标识,可设为任意数
MyTrayIcon.uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE; //要加入的图标句柄,可任意指定,此处为在Tform中Icon属性中指定的图标
MyTrayIcon.uCallbackMessage := WM_MYTRAYICONCALLBACK; //回调函数
MyTrayIcon.hIcon := Icon.Handle;
MyTrayIcon.szTip := '便利店服务器'; // 图标的提示信息
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); //将程序的窗口样式设为TOOL窗口,可避免在任务条上出现
Shell_NotifyIcon(NIM_ADD,@MyTrayIcon); //向托盘中添加图标
end
else
begin
canclose := false;
Exit;
end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@MyTrayIcon); //删除托盘图标
end;
展开
 我来答
sirouszlh
2014-01-15 · TA获得超过1651个赞
知道小有建树答主
回答量:1038
采纳率:100%
帮助的人:638万
展开全部
何必这么累
找个托盘控件就可以实现
例如 TrayIcon
TrayIcon.Icons 对应一个 TImageList 来回切换就可以实现动画效果

CoolTrayIcon我用得最多,实现动画更简单点
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ayi033
2014-01-15 · TA获得超过144个赞
知道小有建树答主
回答量:317
采纳率:100%
帮助的人:103万
展开全部
你的闪动应该是循环在 Modify你的图标,再循环里面加上Application.ProcessMessages;
追问
在循环里面加上Application.ProcessMessages后,双击左键和单击右键都行,但是单击右键“打开”可以,“退出”程序不行,何解,求大师支招!!!
追答
首先你要先退出你的循环,再执行别的.
你的循环应该是在主线程执行的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
石家庄物流网8
2014-01-15
知道答主
回答量:4
采纳率:0%
帮助的人:5万
展开全部
利用timer进行模拟动画即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式