如何检测TMenuItem右键?

del*_*010 5 delphi

平台:delphi 2010

  1. 在form1上删除Tmainmenu
  2. 在form1上删除Tpopupmenu
  3. 添加mainmenu1和popupmenu项目(mainmenu - > file - > item1,popupmenu - > popup item1)
  4. item1.onRgihtClick show popupmenu
  5. F9
  6. 文件 - > item1右键单击,弹出菜单,选择item1 bla bla bla ....
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 222
  ClientWidth = 447
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  Menu = MainMenu1
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object MainMenu1: TMainMenu
    Left = 136
    Top = 64
    object file1: TMenuItem
      Caption = 'file'
      object recentfile1: TMenuItem
        Caption = 'item 1'
      end
    end
  end
  object PopupMenu1: TPopupMenu
    Left = 24
    Top = 136
    object popupitem1: TMenuItem
      Caption = 'popup item'
      OnClick = popupitem1Click
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

Ser*_*yuz 3

这是以下示例的菜单结构

\n\n
File1           Edit1\n  FileItem11      EditItem11\n  FileItem21      EditItem21\n
Run Code Online (Sandbox Code Playgroud)\n\n

和两个弹出菜单项。代码:\xc2\xa0

\n\n
type\n  TForm1 = class(TForm)\n    MainMenu1: TMainMenu;\n    File1: TMenuItem;\n    FileItem11: TMenuItem;\n    FileItem21: TMenuItem;\n    Edit1: TMenuItem;\n    EditItem11: TMenuItem;\n    EditItem21: TMenuItem;\n    PopupMenu1: TPopupMenu;\n    PopupItem11: TMenuItem;\n    PopupItem21: TMenuItem;\n    procedure PopupItem11Click(Sender: TObject);\n    procedure PopupItem21Click(Sender: TObject);\n  private\n    FSelectedItem: TMenuItem;\n    FTracking: Boolean;\n    procedure MenuRButtonUp(var Msg: TMessage); message WM_MENURBUTTONUP;\n  public\n    { Public declarations }\n  end;\n\nvar\n  Form1: TForm1;\n\nimplementation\n\n{$R *.dfm}\n\n{ TForm1 }\n\nprocedure TForm1.MenuRButtonUp(var Msg: TMessage);\nvar\n  Cmd: UINT;\nbegin\n  if not FTracking then\n    FSelectedItem :=\n        MainMenu1.FindItem(GetMenuItemID(Msg.LParam, Msg.WParam), fkCommand);\n\n  if (not FTracking) and (FSelectedItem <> nil) then begin\n    FTracking := True;\n    LongBool(Cmd) := TrackPopupMenuEx(PopupMenu1.Handle,\n                            TPM_RECURSE or TPM_BOTTOMALIGN or TPM_RETURNCMD,\n                            Mouse.CursorPos.X, Mouse.CursorPos.Y, Handle, nil);\n    FTracking := False;\n    if Cmd <> 0 then\n      PopupMenu1.DispatchCommand(Cmd);\n  end;\n  inherited;\nend;\n\nprocedure TForm1.PopupItem11Click(Sender: TObject);\nbegin\n  Caption := 'Popup Item 1 clicked on ' + FSelectedItem.Caption;\nend;\n\nprocedure TForm1.PopupItem21Click(Sender: TObject);\nbegin\n  // whatever..\n  Caption := 'Popup Item 2 clicked on ' + FSelectedItem.Caption;\nend;\n
Run Code Online (Sandbox Code Playgroud)\n

  • -1,表示标准菜单不支持 Richt 单击。他们是这样。这可以通过“WM_MENURBUTTONUP”消息实现,该消息是为此目的而引入的:http://msdn.microsoft.com/en-us/library/ms647610.aspx。搜索一下 http://www.deja.com 上的档案,有很多在 Delphi 中使用 `WM_MENURBUTTONUP` 的例子。 (2认同)