M
Micro Whaight
Unregistered / Unconfirmed
GUEST, unregistred user!
现在已经按照Shell_NotifyIcon建立了托盘区程序, 同时也写了相应的事件<br>处理(代码片断如下). 但是根据这种方式建立起来的左/右键菜单, 在点击其它窗<br>口或者桌面时, 并不会马上消失, 而是要过一段时间. 而Windows的那些个托盘程<br>序, 如输入法, 音量调整等程序, 在通过左/右键弹出相应的菜单后, 如果不选, <br>而是直接点击桌面或者其它窗口, 那些菜单会很快消失. 不知道这需要处理那个消<br>息?<br><br> 是不是和我的程序存在一个可见的窗口有关?<br> <br>附:代码片断<br><br>...<br>type<br> TfrmDisplay = class(TForm)<br> ...<br> public<br> procedure WndProc(var Msg: TMessage); override;<br>end;<br><br><br>implementation<br>...<br>const<br> WM_TRAYNOTIFY = WM_USER + 1;<br>...<br>var<br> NotifyData : NOTIFYICONDATA;<br>...<br>procedure TfrmDisplay.FormCreate(Sender: TObject);<br>begin<br> ...<br> //注册托盘图标<br> with NotifyData do begin<br> cbSize := SizeOf(NotifyData);<br> Wnd := Handle;<br> uID := 0;<br> uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;<br> uCallbackMessage := WM_TRAYNOTIFY;<br> hIcon := IconArray[FaceNormal];<br> StrPLCopy(szTip, '托盘区', 6);<br> end;<br> Shell_NotifyIcon(NIM_ADD, @NotifyData);<br>end;<br><br>procedure TfrmDisplay.WndProc(var Msg: TMessage);<br>var<br> pt : TPoint;<br>begin<br> if Msg.Msg = WM_TRAYNOTIFY then begin<br> if Msg.LParam = WM_LBUTTONDOWN then begin<br> GetCursorPos(pt);<br> pmSet.Popup(pt.x, pt.y);<br> ////--->是一个TPopupMenu.<br> end;<br> end<br> else<br> inherited;<br>end;<br><br>