• [Delphi]动态创建菜单


    在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.
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    北科的秋天
    最大子段和问题(dp)
    cmd应用
    问题 H: 抽奖活动(大数)
    大数算法
    模板整理(三)
    在CMD中建立一个不能删除的文件
    波利亚(Polya)罐子模型
    51nod-迷宫问题(Dijkstra算法)
    优先队列
  • 原文地址:https://www.cnblogs.com/jijm123/p/15266708.html
Copyright © 2020-2023  润新知