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

原文地址:https://www.cnblogs.com/jijm123/p/11216483.html

时间: 2024-10-10 11:59:37

Delphi动态创建菜单的相关文章

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

开发所用delphi版本是xe2,效果图如下: 代码如下: ----------------------------------------------------------------------------------------------------------------- unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Class

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

效果图如下: 实现部分代码如下: var rec: Integer = 0; //记录增行按钮点击次数 implementation {$R *.dfm} //动态释放单个组件内存,即销毁组件 procedure TForm1.DeleteRow(Sender: TObject); begin if rec < 1 then Exit else begin TPanel(Panel1.Controls[rec]).Free; //释放单个控件内存 TComboBox(Panel2.Control

动态创建菜单

/** * 微信菜单发布外网 */ function showwx_menu_release(){ $wx_menu = load_mysql ("wx_menu"); #获取一级菜单[已开启的] $res=$wx_menu->getAll_menu_parents(); $data=array(); foreach ($res['content'] as $key=>$value){ $data[]=$this->menu_arr($value['id'],$val

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

unit Unit1;   interface   uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ExtCtrls;   type   TForm1 = class(TForm)     pnl1: TPanel;     btn1: TButton;     btn2: TButton;     procedure btn1Click(

Delphi 动态创建控件,并绑定控件事件

type TForm13 = class(TForm) Button1: TButton; ScrollBox1: TScrollBox; procedure Button1Click(Sender: TObject); private { Private declarations } procedure myClick(sender: TObject); public { Public declarations } end; var Form13: TForm13; implementatio

Delphi动态添加控件

{动态添加导航} var Panl:Tpanel; MainPage,Subpage:TPageControl; TabSheet1: TTabSheet; ToolBar2: TToolBar; Splitter:TSplitter; begin {创建导航树开始} Panl:=Tpanel.Create(self); with Panl do begin Parent := mainForm; Left:= 0 ; Top:= 30 ; Width:= 185 ; Height:= 381

delphi 多线程 动态创建ADO

delphi 在多线程中动态连接ADO控件 异常:exception class EOleSysError with message '尚未调用CoInitialize' 如果是使用多线程的话那就在 Execute事件的开头加上 CoInitialize(nil); 结尾加上CoUninitialize() unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo

【MFC】VS2013 动态创建快捷菜单(右键菜单)

参考 http://blog.csdn.net/csdnzhwk/article/details/47395639 参考 http://blog.csdn.net/jiadabin/article/details/22686161 1.创建一个基于对话框的项目 2.在资源头文件(Resource.h),定义命令ID: #define ID_MENUCAT 1109 #define ID_MENUDOG 1110 #define ID_MENUMONKEY 1111 #define _APS_NE

C#动态创建两个按钮,btn2复制btn1的Click事件,匿名委托

现在有一个按钮btn1,要动态创建出一个btn2,需要btn2点击时调用btn1的点击. 在delphi中这种操作很简单:btn2.onClick:=btn1.onClick,因为onClick就是个属性,和name.width.height一样. 但是c#不能直接访问,这就麻烦了, 匿名委托,例子: //循环把所有菜单条目加到左侧 Image img=null, imgDefaultDa = null, imgDefaultXiao = Image.FromFile(s + "菜单小项.png