|
bsp; //设置时钟超时响应过程。
end;
……
end; //end of Create
C. 接下来在前述重载的隐藏窗口消息处理过程中响应不同消息来设置上述两个变量的状态。
procedure TEoCSysTray.WndProc(var Msg: TMessage);
begin
……
case Msg.LParam of
WM_XBUTTONDOWN:
begin
……
FMouseDblClicked := False;//双击尚未发生
FMouseUp := False; //鼠标尚未松开
FTimer.Enabled := False; //结束上次延时
FTimer.Enabled := True; //开始延时
end;
WM_XBUTTONUP:
FMouseUp := True; //设置鼠标已经松开,便于Timer检查
WM_XBUTTONDBLCLk:
begin
FMouseDblClicked := True; //设置双击已经发生的标志
触发双击事件;
end;
else
Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;
end; //end of WndProc
D. 在延时处理程序中判断鼠标状态,触发单击事件。
procedure TEoCSysTray.OnButtonTimer(Sender: TObject);
begin
FTimer.Enabled := False;
if (not FMouseDblClicked) and FMouseUp then //双击尚未发生且鼠标已松开
begin
触发单击事件;
触发MouseUp事件;
end;
end; //end of procedure OnButtonTimer
如此一来,单击事件就表现为WM_XBUTTONDOWN, Click, WM_XBUTTONUP,而双击事件则表现为WM_XBUTTONDOWN, WM_XBUTTONDBLCLK(过滤掉了两条MW_XBUTTONUP消息),从而避免了双击事件发生时触发单击事件。
5 总结
关于通知栏图标的编程还有很多话题,比如动态切换图标、响应MouseLeave和MouseEnter事件等,在实际中都有应用,难以面面俱到。
上一页 [1] [2] [3] [4] [5] 没有相关教程
|