还有考虑MenuItem.name的情况,比如在菜单项比较多的情况下菜单名的命名问题

解决方案 »

  1.   

    你可以用tactionlist试一试,不过还是要设置tag作为标志
      

  2.   

    MenuItme1.OnClick:=MenuClick;
    procedure TForm1.MenuClick(Sender:TObject);
    begin
     ....
    end;
      

  3.   

    以下代码创建了一个FORM及BUTTON,点击BUTTON后,动态创建了FORM的弹出式菜单。点击鼠标右键,再点击菜单项,可以看到你想要的效果。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls,menus;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        procedure MenuClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
      MenuItems: Array of TMenuItem;
      i: Integer;
    begin
      SetLength(MenuItems,3);
      for i:=0 to Length(MenuItems)-1 do
        begin
        MenuItems[i] := NewItem('Menu'+inttostr(i),TextToShortCut('Ctrl+'+inttostr(i)),
         false,true,nil,0,'Items'+inttostr(i));
        MenuItems[i].Tag := i;
        MenuItems[i].OnClick := MenuClick;
        end;
      Self.PopupMenu := NewPopUpMenu(Self,'MainMenu',paCenter,True,MenuItems);
    end;procedure TForm1.MenuClick(Sender: TObject);
    begin
      Case TMenuItem(Sender).tag of
       0: showmessage('You clicked MenuItem 0');
       1: showmessage('You clicked MenuItem 1');
       2: showmessage('You clicked MenuItem 2');
      end;
    end;end.
      

  4.   

    现在加分,非常感谢 NetFriend(NetFriend) ,Apollo47(阿波罗) 
      

  5.   

    现在加分,非常感谢 NetFriend(NetFriend) ,Apollo47(阿波罗) ,和大家
      

  6.   

    仅做参考 C++Builder
    1. 在表单类定义末尾加入消息响应表,取得WM_SYSCOMMAND消息的处理权 
    BEGIN_MESSAGE_MAP 
    MESSAGE_HANDLER(WM_SYSCOMMAND,TMessage,OnWMSysCommand) 
    END_MESSAGE_MAP(TForm) 2. 在表单类定义的private区内加入消息处理函数声明 
    private: // User declarations 
    void __fastcall OnWMSysCommand(TMessage& Message); 在表单文件内(如Unit1.h) 3. 写出消息响应函数 
    void __fastcall TForm1::OnWMSysCommand(TMessage& Message) 

    if(Message.WParam==ID_SysMenu_MyItem) 

    // Your Code Here, Do Something 

    TForm::Dispatch(&Message);