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.
效果图:
不过, 菜单事件一般是使用 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.