• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[Delphi]动态创建菜单

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在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.

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
学习笔记-MATLAB发布时间:2022-07-18
下一篇:
接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap