如何检测TMenuItem右键? [英] How to detect TMenuItem right click?

查看:85
本文介绍了如何检测TMenuItem右键?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

platform:delphi 2010

platform:delphi 2010


  1. 在form1上放下Tmainmenu
  2. 在form1上放下Tpopupmenu
  3. 添加mainmenu1和popupmenu项目
    (mainmenu->文件-> item1,popupmenu->弹出项目1)
  4. item1.onRgihtClick显示popupmenu
  5. f9
  6. 文件-> item1右键单击,弹出菜单,选择item1 bla bla bla ....
  1. drop Tmainmenu on form1
  2. drop Tpopupmenu on form1
  3. add mainmenu1 and popupmenu items (mainmenu --> file -->item1 , popupmenu-->popup item1)
  4. item1.onRgihtClick show popupmenu
  5. f9
  6. file-->item1 right click, popupmenu , select 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


推荐答案

以下示例的菜单结构

File1           Edit1
  FileItem11      EditItem11
  FileItem21      EditItem21

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

and two popup menu items. The code:  

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    FileItem11: TMenuItem;
    FileItem21: TMenuItem;
    Edit1: TMenuItem;
    EditItem11: TMenuItem;
    EditItem21: TMenuItem;
    PopupMenu1: TPopupMenu;
    PopupItem11: TMenuItem;
    PopupItem21: TMenuItem;
    procedure PopupItem11Click(Sender: TObject);
    procedure PopupItem21Click(Sender: TObject);
  private
    FSelectedItem: TMenuItem;
    FTracking: Boolean;
    procedure MenuRButtonUp(var Msg: TMessage); message WM_MENURBUTTONUP;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MenuRButtonUp(var Msg: TMessage);
var
  Cmd: UINT;
begin
  if not FTracking then
    FSelectedItem :=
        MainMenu1.FindItem(GetMenuItemID(Msg.LParam, Msg.WParam), fkCommand);

  if (not FTracking) and (FSelectedItem <> nil) then begin
    FTracking := True;
    LongBool(Cmd) := TrackPopupMenuEx(PopupMenu1.Handle,
                            TPM_RECURSE or TPM_BOTTOMALIGN or TPM_RETURNCMD,
                            Mouse.CursorPos.X, Mouse.CursorPos.Y, Handle, nil);
    FTracking := False;
    if Cmd <> 0 then
      PopupMenu1.DispatchCommand(Cmd);
  end;
  inherited;
end;

procedure TForm1.PopupItem11Click(Sender: TObject);
begin
  Caption := 'Popup Item 1 clicked on ' + FSelectedItem.Caption;
end;

procedure TForm1.PopupItem21Click(Sender: TObject);
begin
  // whatever..
  Caption := 'Popup Item 2 clicked on ' + FSelectedItem.Caption;
end;

这篇关于如何检测TMenuItem右键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆