button动态添加菜单
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,stdctrls,extctrls,menus;type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
 //定义菜单命令的事件处理过程
  procedure mypopuphandler(sender:tobject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }  end;var
  Form1: TForm1;
  mymainmenu:tmainmenu;
  mysubitems:array[0..3] of tmenuitem;
  mypopupmenu:tpopupmenu;
  mypopupitems:array[0..3] of tmenuitem;
  i:integer;implementation{$R *.dfm}
 //菜单命令处理过程
 procedure tform1.mypopuphandler(sender:tobject);
    begin
     with sender as tmenuitem do
       begin
        showmessage(caption);
        end;
     end;
procedure TForm1.Button1Click(Sender: TObject);
var
  myitem:array[0..2] of tmenuitem;
begin
  mymainmenu:=tmainmenu.create(self);
  //creat three menuitem
  for i:=0 to 2 do begin
  myitem[i]:=tmenuitem.create(self);
  myitem[i].caption:='子菜单'+inttostr(i)+'(&'+inttostr(i)+')';
  mymainmenu.items.add(myitem[i]);
  end;
  //creat four subitems
  for i:=0 to 3 do begin
  mysubitems[i]:=tmenuitem.create(self);
  mysubitems[i].Caption:='主菜单项'+inttostr(i)+'(&'+inttostr(i+1)+')'
  mymainmenu.Items[0].Add(mysubitems[i]);
  mysubitems[i].OnClick:=mypopuphandler;
  end;
//set separator
mysubitems[1].caption:='-'
mysubitems[3].break:=mbbarbreak;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
mypopupmenu:=tpopupmenu.create(self);
 for i:=0 to 3 do begin
   mypopupitems[i]:=tmenuitem.create(self);
   mypopupitems[i].Caption:=''+inttostr(i)+'(&'+inttostr(i+1)+')';
   mypopupitems[i].onclick:=mypopuphandler;
   end;
   
   end;procedure TForm1.Button3Click(Sender: TObject);
begin
mypopupmenu.Popup(form1.Left+60,form1.Top+60);
end;end.

解决方案 »

  1.   


      //creat four subitems
      for i:=0 to 3 do begin
      mysubitems[i]:=tmenuitem.create(self);
      mysubitems[i].Caption:='主菜单项'+inttostr(i)+'(&'+inttostr(i+1)+')'
      mymainmenu.Items[0].Add(mysubitems[i]);
      mysubitems[i].OnClick:=mypopuphandler;
      end;中
    mymainmenu.Items[0].Add(mysubitems[i]);
    应该是mymainmenu.Items.Add(mysubitems[i]);—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————