在delphi中动态创建菜单的Demo。
实现功能:
1) 在Form的Oncreate事件中,动态创建子菜单。
2) 通过子菜单来设置Form上label的字体大小。
3) 动态创建的菜单,带有groupIndex属性以及单选标记。
代码如下:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls; type TForm1 = class(TForm) mm1: TMainMenu; File1: TMenuItem; New1: TMenuItem; Open1: TMenuItem; Save1: TMenuItem; SaveAs1: TMenuItem; Print1: TMenuItem; PrintSetup1: TMenuItem; Exit1: TMenuItem; N1: TMenuItem; N2: TMenuItem; MenuItemSize: TMenuItem; lbl1: TLabel; procedure FormCreate(Sender: TObject); procedure CheckFontSize(MenuItem:TmenuItem); procedure MenuItemFontSizeClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} const FontSize : array[0..7] of Integer = (6,8,10,12,14,16,18,20); //这里,在Create时动态创建了8个子菜单 //同时,指定了OnClick事件 //并检测窗体内的一个label的字体大小 procedure TForm1.FormCreate(Sender: TObject); var i:integer; menuItem : TMenuItem; begin for i := low(FontSize) to high(FontSize) do begin menuItem := TMenuItem.Create(Self); menuItem.Caption := IntToStr(FontSize[i]); menuItem.Tag := FontSize[i]; menuItem.GroupIndex := 9; menuItem.RadioItem := True; menuItem.OnClick := MenuItemFontSizeClick; MenuItemSize.Insert(MenuItemSize.Count,menuItem); end; CheckFontSize(MenuItemSize); end; //动态创建的菜单项的单击事件 //设置字体大小,同时改变选中状态 procedure TForm1.MenuItemFontSizeClick(Sender: TObject); begin lbl1.Font.Size := (sender as TMenuItem).Tag; //寻找被按下菜单的Tag,然后赋值给字体大小 (sender as TMenuItem).Checked := true; //选中 end; //检测窗体内的一个label的字体大小 procedure TForm1.CheckFontSize(MenuItem:TmenuItem); var i:Integer; begin ShowMessage(IntToStr(lbl1.Font.Size)); for i := 0 to 7 do begin if lbl1.Font.Size = FontSize[i] then begin MenuItem.Items[i].Checked := true; Break; end; end; end; end.