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.
你需在菜单创建时给其的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;
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.
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;