1. 程式人生 > 其它 >[Delphi]動態建立選單

[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.
好的程式碼像粥一樣,都是用時間熬出來的