请问如何在mainmenu菜单动态加入几个菜单,并且有不同的事件相对应,谢谢了

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Menus;type
      TForm1 = class(TForm)
        mm_1: TMainMenu;
        btn_1: TButton;
        procedure btn_1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure MenuItem1Click(Sender:TObject);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btn_1Click(Sender: TObject);
    begin
     with  mm_1.Items do
     begin
      Add(NewItem('First Menu',0,False,True,MenuItem1Click,0,'MenuItem1'));
      Add(NewLine);
     end;
    end;procedure TForm1.MenuItem1Click(Sender: TObject);
    begin
      ShowMessage('动态创建!');
    end;end.
      

  2.   

    你需在菜单创建时给其的OnClick 赋值;另你给OnClick 赋值的过程的参数须与OnClick一致,在过程中可以通过Sender来区别,以下是我的一段代码:
    procedure TfrmMain.AddTeleVaryItem;
    var
       i,n:integer;
    begin
       for i:=0 to High(OprtTypes) do
       begin
          ChildItem:=TMenuItem.Create(Nil);
          ChildItem.Caption:=OprtTypes[i].OprtType;
          fmTeleVary.MainMenu1.Items.Add(ChildItem);
          ChildItem.Name:='O1'+inttostr(i);
          ChildItem.OnClick:=NewMenuItemClick;
       end;
    end;procedure TfrmMain.NewMenuItemClick(Sender: TObject);
    var
       TreeNode:TTreeNode;
       str:String;
       i:integer;
    begin
       str:=(Sender as TMenuItem).Caption;
       if str='1' then
       beign
          //
       end;
       if str='2' then
       beign
          //
       end;
       .......end;