zoukankan      html  css  js  c++  java
  • [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.
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    leetcode bugfree note
    leetcode 419
    leetcode 165
    leetcode 155
    leetcode 204
    leetcode 28
    将二叉搜索树转为有序双向链表
    leetcode 397
    ABAP 动态内表创建/赋值
    ABAP 屏幕下拉框值根据选择框填值赋值
  • 原文地址:https://www.cnblogs.com/jijm123/p/15266708.html
Copyright © 2011-2022 走看看