Delphi动态创建菜单
在程序运行中动态创建菜单,主要使用TMeunItem类,所有菜单的条目都是TMenuItem的一个实例。
打开Delphi7集成开发环境,在默认新建工程里,放置一个Button1按钮和MainMenu1菜单项,设置Button1的Caption属性为添加主菜单。

在Button1的Object Inspector选项卡设置Button1的OnClick响应事件,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
files,edit:TMenuItem;
begin
files:=TMenuItem.Create(self);
edit:=TMenuItem.Create(self);
files.Caption:='文件';
edit.Caption:='编辑';
Form1.MainMenu1.AutoHotkeys:=mamanual;//指定为手动快捷键; 默认是自动添加的
Form1.MainMenu1.Items.Add(files);
Form1.MainMenu1.Items.Add(edit);
end;

F9运行程序,点击添加主菜单按钮后,可以看到程序多了两个菜单项,分别为文件和编辑

关闭程序,在窗体上再放置一个Button2按钮,设置Captain属性:添加菜单项,同样的方法给Button2添加OnClick响应函数,代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
files,edit,new,copy:TMenuItem;
begin
files:=TMenuItem.Create(self);
edit:=TMenuItem.Create(self);
files.Caption:='文件';
edit.Caption:='编辑';
Form1.MainMenu1.AutoHotkeys:=mamanual;
Form1.MainMenu1.Items.Add(files);
Form1.MainMenu1.Items.Add(edit);
new:=TMenuItem.Create(self);
copy:=TMenuItem.Create(self);
new.Caption:='新建';
copy.Caption:='拷贝';
files.Add(new);
edit.Add(copy);
end;
F9运行程序,可以发现在文件菜单下增加了新建菜单项,在编辑菜单增加了拷贝菜单项

在Unit1.pas中为我们添加的菜单项添加响应事件,在Form1类的private中添加方法声明,在implement中编写函数具体代码如下:
private
{ Private declarations }
procedure test(Sender:TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.test(Sender: TObject);
begin
showmessage('测试动态添加菜单') ;
end;
同时在上面的Button2的响应方法中添加两行代码,为新建和复制按钮OnClick添加响应方法test(),添加后Button2的OnClick响应方法如下:
procedure TForm1.Button2Click(Sender: TObject);
var
files,edit,new,copy:TMenuItem;
begin
files:=TMenuItem.Create(self);
edit:=TMenuItem.Create(self);
files.Caption:='文件';
edit.Caption:='编辑';
Form1.MainMenu1.AutoHotkeys:=mamanual;
Form1.MainMenu1.Items.Add(files);
Form1.MainMenu1.Items.Add(edit);
new:=TMenuItem.Create(self);
copy:=TMenuItem.Create(self);
new.Caption:='新建';
copy.Caption:='拷贝';
new.OnClick:=test;
copy.OnClick:=test;
files.Add(new);
edit.Add(copy);
end;


F9运行程序,点击添加菜单项后,再点击文件-新建菜单,会弹出对话框。证明菜单项的响应事件添加成功。

Delphi动态创建菜单的更多相关文章
- Delphi动态创建组件,并释放内存
开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...
- PopupMenu动态创建菜单
1.TPopupMenu一条横线在Caption输入一个'-'就可以了.2.在Caption输入名字之后加入一个&就可以不显示快捷键,比如: 退出& 这样退出按钮的快捷键就不会显示出 ...
- Delphi 动态创建组件,单个创建、单个销毁
效果图如下: 实现部分代码如下: var rec: Integer = 0; //记录增行按钮点击次数 implementation {$R *.dfm} //动态释放单个组件内存,即销毁组件 pro ...
- DELPHI 动态 创建和释放 多个 EDIT 控件
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...
- delphi动态创建控件
动态创建控件 其实动态创建控件很简单,相信看过本文后你会全明白的. 1 先在单元的initialization 部分注册它,(这样在单元使用时会自动注册的)如: RegisterClass( TBut ...
- Delphi动态添加菜单
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- DELPHI动态创建窗体
//第一种方式 procedure TForm1.btn1Click(Sender: TObject); begin With TForm2.Create(Application) do Try Sh ...
- MFC动态创建菜单
http://blog.csdn.net/csdnzhwk/article/details/47395639
- Delphi动态添加控件
{动态添加导航} var Panl:Tpanel; MainPage,Subpage:TPageControl; TabSheet1: TTabSheet; ToolBar2: TToolBar; S ...
随机推荐
- moment.js 使用方法记录
操作 设值/赋值 1. 具体方法. 1)毫秒(millisecond) moment().millisecond(Number); moment().millisecond(); // Number ...
- D - Beautiful Graph CodeForces - 1093D (二分图染色+方案数)
D - Beautiful Graph CodeForces - 1093D You are given an undirected unweighted graph consisting of nn ...
- 【转载】MCMC和Gibbs Sampling算法
转载随笔,原贴地址:MCMC和Gibbs Sampling算法 本文是整理网上的几篇博客和论文所得出来的,所有的原文连接都在文末. 在科学研究中,如何生成服从某个概率分布的样本是一个重要的问题.如果样 ...
- angularjs 实现下拉框编辑数据回显
https://www.cnblogs.com/janice-jia/p/9764938.html 正常的js回显选择,需要添加 select ="selected",angula ...
- mysql的数据库存放的路径以及安装路径
1.简单查看路径 1.查看数据库的存放路径 进入mysql终端mysql>show variables like '%datadir%'; 2.查看文件安装路径 [root@hadoop01 e ...
- 题解 【POJ1722】 SUBTRACT
先讲下题目意思 给定一个长度为\(n\)的序列\((1 \leq n \leq 100)\), 每次合并两个元素\(i,i+1\),即将\(i,i+1\)变为一个新的元素,权值为\(a[i]-a[i+ ...
- 使用CSS3 will-change提高页面滚动、动画等渲染性能----------------------------引用
Chris Ruppel当其使用background-attachment: fixed实现背景图片不随滚动条滚动而滚动效果的时候, 大家肯定会好奇,这到底施了什么魔法,可以让渲染提升如此之显著.3个 ...
- Vue 工程化最佳实践
目录结构 总览 api 目录用于存放 api 请求,文件名与模型名称基本一致,文件名使用小驼峰,方法名称与后端 restful 控制器一致. enums 目录存放 常量,与后端的常量目录对应 ...
- bzoj3307 雨天的尾巴题解及改题过程(线段树合并+lca+树上差分)
题目描述 N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最多的是哪种物品. 输入格式 第一行数字N,M接下 ...
- D. Eternal Victory(dfs + 思维)
D. Eternal Victory time limit per test 2 seconds memory limit per test 256 megabytes input standard ...