在程序运行中动态创建菜单,主要使用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动态创建菜单的更多相关文章

  1. Delphi动态创建组件,并释放内存

    开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...

  2. PopupMenu动态创建菜单

    1.TPopupMenu一条横线在Caption输入一个'-'就可以了.2.在Caption输入名字之后加入一个&就可以不显示快捷键,比如: 退出&  这样退出按钮的快捷键就不会显示出 ...

  3. Delphi 动态创建组件,单个创建、单个销毁

    效果图如下: 实现部分代码如下: var rec: Integer = 0; //记录增行按钮点击次数 implementation {$R *.dfm} //动态释放单个组件内存,即销毁组件 pro ...

  4. DELPHI 动态 创建和释放 多个 EDIT 控件

    unit Unit1;   interface   uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...

  5. delphi动态创建控件

    动态创建控件 其实动态创建控件很简单,相信看过本文后你会全明白的. 1 先在单元的initialization 部分注册它,(这样在单元使用时会自动注册的)如: RegisterClass( TBut ...

  6. Delphi动态添加菜单

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  7. DELPHI动态创建窗体

    //第一种方式 procedure TForm1.btn1Click(Sender: TObject); begin With TForm2.Create(Application) do Try Sh ...

  8. MFC动态创建菜单

    http://blog.csdn.net/csdnzhwk/article/details/47395639

  9. Delphi动态添加控件

    {动态添加导航} var Panl:Tpanel; MainPage,Subpage:TPageControl; TabSheet1: TTabSheet; ToolBar2: TToolBar; S ...

随机推荐

  1. 纯c中声明变量

    count 声明位置错了,纯c中声明变量全部放在main函数里,最前面的位置,要么vc6.0会报错: 修改 #include <stdio.h> int main(void) { int ...

  2. windows下基于IIS配置ssl证书遇到的坑

    前几天配置windows下基于IIS配置ssl证书 完全按照步骤执行 绑定https网址后,一直显示:无法访问此网站 检查了443端口,还有防火墙限制,没发现什么 足足困扰了我好几天 后来突然想到前不 ...

  3. js中toFixed()函数出现小数点后的多位数的原因

    不演示示例了. 强调一点就是:toFixed()返回的str类型,所以如果想写成百分之多少的情况下,建议直接在分子上乘100后,在除以总和,再使用toFixed()函数保留几位小数.不然会出现如下:7 ...

  4. HDU-3746-Cyclic nacklace(KMP, 循环节)

    链接: https://vjudge.net/problem/HDU-3746 题意: 第一题来啦. 现在给你一个字符串,请问在该字符串末尾最少添加多少个字符,可以让这个字符串获得重复循环序列. 思路 ...

  5. 漫话:什么是 https ?这应该是全网把 https 讲的最好的一篇文章了

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/m0_37907797/article/d ...

  6. 把 textbox 遍历赋值为空

    foreach (Control aa in this.Form.Controls){    if (aa.GetType().ToString() == "System.Web.UI.We ...

  7. 前端基础教程-jQuery EasyUI 的EasyLoader实例

    兄弟连前端分享-jQuery EasyUI 的EasyLoader实例 to move panel to other position $('#p').panel('move',{ left:100, ...

  8. 去除弹窗自带url提示

    window.alert = function(name){ var iframe = document.createElement("IFRAME"); iframe.style ...

  9. Hibernate 5 开始使用指南前言

    同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时.数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高. Hibernate 是一个针对 Java 环境的对象关系映射(Objec ...

  10. hdu 5532 Almost Sorted Array nlogn 的最长非严格单调子序列

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...