如何禁用彈出式菜單?在上下文菜單上禁用彈出窗口?
我的問題是,我有一個很好的上下文菜單爲我的列表框,但如果我移 - 右擊一個項目,我執行一些代碼,我不想彈出菜單後彈出。
但是,如果它是一個正常的右鍵單擊列表框,那麼我當然想要彈出菜單。
如何禁用彈出式菜單?在上下文菜單上禁用彈出窗口?
我的問題是,我有一個很好的上下文菜單爲我的列表框,但如果我移 - 右擊一個項目,我執行一些代碼,我不想彈出菜單後彈出。
但是,如果它是一個正常的右鍵單擊列表框,那麼我當然想要彈出菜單。
Delphi中沒有「OnContextPopup」,也沒有「Handled」參數。在德爾福這樣做的一種方式如下:
找到的彈出菜單表單上,單擊它,進入Object Inspector的事件選項卡上,雙擊單元格來的「OnPopup」的權利,並插入下面的代碼(行權後開始):
PROCEDURE TForm1.PopupMenu1Popup(Sender : TObject);
BEGIN
IF GetKeyState(VK_SHIFT) AND $8000<>0 THEN Abort
END;
這將打壓彈出菜單,如果有兩個SHIFT鍵被按下時,菜單將要彈出...
另一個(上面的TLama的評論引發的)是找到你想要抑制彈出窗口的控件的OnContextPopup事件(在這種情況下,你的ListB牛),雙擊它(創建/跳轉到事件處理程序),然後將下面的代碼:
PROCEDURE TForm1.ListBox1ContextPopup(Sender : TObject ; Point : TPoint ; VAR Handled : BOOLEAN);
BEGIN
Handled:=(GetKeyState(VK_SHIFT) AND $8000<>0)
END;
這兩種方法之間的主要區別是,第一個抑制彈出窗口,無論哪個控制彈出式菜單試圖彈出,而第二種方法允許您僅抑制特定控件的彈出窗口(因爲您可以將相同的彈出菜單分配給多個控件)。
處理['OnContextPopup'](http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Controls.TControl.OnContextPopup)事件並返回True如果您想要處理''Handled'參數防止彈出菜單顯示。 – TLama 2014-12-09 11:59:33
@TLama:看起來像一個答案,而不是評論! (甚至可能是正確的!) – 2014-12-09 12:20:55