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 ...
随机推荐
- springboot自动装备date类型报错问题
错误消息: Field error in object 'user' on field 'birthday': rejected value [2001-02-14]; codes [typeMism ...
- 8.Dropout
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist = in ...
- sscanf功能详解(转)
在处理字符串的程序当中,经常会分析字符串,从一大长串的字符串截取我们需要的数据,这如果通过自己手写函数来分析,虽然可以,但当你知道sscanf的功能,那就自己写函数分析就显得多此一举. 这些函数的使用 ...
- Linux常用命令type、date
Linux命令类型: 内置命令(shell内置):cd is shell builtin 外部命令:命令 is /usr/bin/命令,在文件系统的某个路径下有一个与命令名称相应的可执行文件 type ...
- vue的store状态管理模式
var store = { debug: true, state: { message: 'Hello!' }, setMessageAction (newValue) { //所有 store 中 ...
- H5微信分享相关规范
微信分享 用户调用微信的分享功能,可以自定义分享的title和描述,以及小图标和链接.可以分享到群.好友.朋友圈.QQ.QQ空间等. 分享设计规范 分享标题:14字以内,建议使用朋友般亲切的口吻 分享 ...
- Python模拟浏览器多窗口切换
# 模拟浏览器多窗口切换 # 代码中引入selenium版本为:3.4.3 # 通过Chrom浏览器访问发起请求 # Chrom版本:59 ,chromdriver:2.3 # 需要对应版本的Chro ...
- Linux - TCP/IP网络协议基础
1.0 Tcp / IP 背景介绍 上世纪70年代,随着计算机的发展,人们意识到如果想要发挥计算机的更大作用,就要讲世界各地的计算机连接起来. 但是简单的连接时不够的,因为计算机之间无法沟通.因此设计 ...
- python Print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 , #!/usr/bin/python # -*- coding: UTF-8 -*- x="a" y=&qu ...
- JVM(八),垃圾回收标记算法
八.垃圾回收标记算法 1.对象被判定成垃圾的标准 没有被其他对象引用 2.判断对象是否为垃圾的算法 (1)引用计数法 优点and缺点 (2)可达性分析算法