unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure Proc(Sender: TObject); {声明将要被调用的方法}
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
MyMenu: TMainMenu;
Item: TMenuItem;

{实现将要被调用的方法}
procedure TForm1.Proc(Sender: TObject);
begin
if Sender is TMenuItem then
ShowMessage(TMenuItem(Sender).Caption);
end;


procedure TForm1.FormCreate(Sender: TObject);
var
Itemd: TMenuItem;
begin
MyMenu := TMainMenu.Create(Self);
MyMenu.AutoHotkeys := maManual;
Self.Menu := MyMenu;

Item := TMenuItem.Create(MyMenu);
Item.Caption := 'AA';
MyMenu.Items.Add(Item);

Itemd := TMenuItem.Create(MyMenu);
Itemd.Caption := 'A&1';
Itemd.OnClick := Proc; {调用方法}
Item.Add(Itemd);

Itemd := TMenuItem.Create(Item);
Itemd.Caption := 'A&2';
Itemd.OnClick := Proc; {调用方法}
Item.Add(Itemd);
end;

end.

效果图:

TMainMenu 类[三] - 手动建立菜单(5) : 给菜单项添加事件_其他

 


不过, 菜单事件一般是使用 ActionList 的, 添加一个 ActionList 同时添加一个方法, 实现和上面同样的功能:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ActnList;

type
TForm1 = class(TForm)
ActionList1: TActionList;
Action1: TAction;
procedure FormCreate(Sender: TObject);
procedure Action1Execute(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
MyMenu: TMainMenu;
Item: TMenuItem;


procedure TForm1.Action1Execute(Sender: TObject);
begin
if Sender is TMenuItem then
ShowMessage(TMenuItem(Sender).Caption);
end;


procedure TForm1.FormCreate(Sender: TObject);
var
Itemd: TMenuItem;
begin
MyMenu := TMainMenu.Create(Self);
MyMenu.AutoHotkeys := maManual;
Self.Menu := MyMenu;

Item := TMenuItem.Create(MyMenu);
Item.Caption := 'AA';
MyMenu.Items.Add(Item);

Itemd := TMenuItem.Create(MyMenu);
Itemd.Caption := 'A&1';
Itemd.OnClick := Action1Execute; {调用方法}
Item.Add(Itemd);

Itemd := TMenuItem.Create(Item);
Itemd.Caption := 'A&2';
Itemd.OnClick := Action1Execute; {调用方法}
Item.Add(Itemd);
end;

end.