2009-07-27 81 views
0

我試圖顯示一個彈出菜單,當右鍵單擊我的通知圖標,它工作正常;但是我想讓菜單在用戶點擊菜單之外時消失。德爾福「托盤」圖標(NotifyIcon)上下文菜單不會消失,當點擊它外面

它被認爲是由設計(根據這個文件:http://support.microsoft.com/kb/135788),但沒有像我這樣的體面的應用程序的行爲。我嘗試使用彈出菜單的句柄調用SetForegroundWindow無濟於事。我肯定可以解決這個問題,就像我幾年前做過的那樣,但不記得如何。

任何人都知道如何達到預期的行爲?

回答

0

我找到了解決方案!

我打電話給 SetForegroundWindow(PopupMenu1.Handle);

不工作,但在OnPopup事件處理程序改變這

procedure TForm1.PopupMenu1Popup(Sender: TObject); 
begin 
    // Hack to fix the "by design" behaviour of popups from notification area icons. 
    // See: http://support.microsoft.com/kb/135788 
    BringToFront(); 
end; 

作品!

顯然,如果在調用這個窗體的時候這個窗體是可見的,那麼你的應用程序會跳到最前面,但是如果它被隱藏了(就像我的一樣),那麼它就會工作。

雖然,我很想知道是否有一種方法可以使菜單正常工作。

+1

你的`SetForegroundWindow`調用不起作用的原因是你給它一個* menu *句柄而不是* window *句柄。它們不可互換。您應該只使用`Handle`(又名`Self.Handle`)。 – 2009-07-27 16:58:11

相關問題