2014-12-09 81 views
0

如何禁用彈出式菜單?在上下文菜單上禁用彈出窗口?

我的問題是,我有一個很好的上下文菜單爲我的列表框,但如果我移 - 右擊一個項目,我執行一些代碼,我不想彈出菜單後彈出。

但是,如果它是一個正常的右鍵單擊列表框,那麼我當然想要彈出菜單。

+4

處理['OnContextPopup'](http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Controls.TControl.OnContextPopup)事件並返回True如果您想要處理''Handled'參數防止彈出菜單顯示。 – TLama 2014-12-09 11:59:33

+2

@TLama:看起來像一個答案,而不是評論! (甚至可能是正確的!) – 2014-12-09 12:20:55

回答

2

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; 

這兩種方法之間的主要區別是,第一個抑制彈出窗口,無論哪個控制彈出式菜單試圖彈出,而第二種方法允許您僅抑制特定控件的彈出窗口(因爲您可以將相同的彈出菜單分配給多個控件)。

+4

@TLama本身就是指'TControl.OnContextPopup'。你可以按照他的評論中的鏈接... :) – kobik 2014-12-09 12:48:07

+0

好吧 - 不知道那個(它不是一個已發佈的事件,所以你必須在代碼中完成)。更新答案以顯示替代方式。 – HeartWare 2014-12-09 12:57:38

+2

「這不是已發佈的事件」 - 錯誤。放下TListBox並檢查發佈的事件。特別是在'OnContextPopup' – kobik 2014-12-09 13:03:14