请问:如何动态创建菜单 请问:如何动态创建菜单及其事件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 转贴:动态创建菜单全接触 动态创建菜单全接触 高红岩(ghyghost)基本认识:在Delphi的程序开发环境中,封装的VCL减化了我们许多的开发工作,由在界面的设计上使开发的进度很快,但在很多的时候,我们需要自己来设计可视化的用户界面,而且是在程序的运行中,这时我们就得利用Delphi给我们提供的类来完成我们需要的工作了,下面笔者就和朋友们浅入的讨论一下动态创建”菜单”的基本知识,希望本文给那些刚入门的朋友来个抛砖引玉的作用。在delphi的菜单设计中,有两个Delphi的菜单控件:1:Tmainmenu;2:Tpopupmenu;前者是创建窗口的菜单,后者是创建右键弹出式菜单的控件,但在Delphi庞大的类库中有一个类与这两个控件密切相关,它就是:TMenuItem,窗口的菜单和右键弹出式菜单的每个条目都是TMenuItem类的一个对象。此TMenuItem类不出现在控件板上,在程序中用代码可创建其实例。 基本知识:在tmainmenu,tpopupmenu控件中有一个属性是items,此属性是数组型,里面的参数为菜单项的索引值。文件 编辑 查看 插入 格式 帮助---- ---- ---- ---- ---- ----新建 撤消 标尺 对象 字体 关于打开 拷贝 源码 公式 颜色 相信您看过上面的菜单简单表示之后是非常熟悉的,在此菜单中菜单头的索引值代表如下:”文件”的菜单的items值为0;”编辑”的菜单的items值为1;以此类推。items属性是tmenuitem类型,而在此类型中还有一个属性,是items,如果您略懂”类”的关系,您就不难明白此类似”嵌套”的关系。”新建”菜单选项是”文件”菜单选项的子类,用代码表示为tmainmenu.items[0].items[0],”打开”菜单选项为tmainmenu.items[0].items[1],以此类推,而代表”编辑”菜单中的”拷贝”菜单选项的代码为tmainmenu.items[1].items[1],其它菜单代码表示以此类推。基本实例:知道了菜单的items结构之后,我们就可以进一步大胆的创建自己有序的菜单了。上面讨论到窗口的菜单和右键弹出式菜单的每个条目都是TMenuItem类的一个对象。那么我们就可以create它的一个实例,来添加自己想要的菜单了。示例过程:1:新建一个工程。2:添加一个tmainmenu控件。3:添加一个button控件,并在button的onclick事件中写入如下代码:procedure TForm1.Button1Click(Sender: TObject);varfiles,edit:tmenuitem;{要有实例的声明}beginfiles:=tmenuitem.Create(self);edit:=tmenuitem.create(self);files.Caption:=’文件’;edit.caption:=’编辑’;mainmenu1.AutoHotkeys:=mamanual;{此句代码为不让系统自动设置快捷键}form1.MainMenu1.Items.Add(files);form1.mainmenu1.items.add(edit);end; 运行后,出现如上面例举的菜单的部分结构,如此看来动态创建菜单项的方法是非常简单的,这无疑于Delphi把系统的函数进行了封装。菜单头我们创建完了,接下来就该创建菜单里的菜单项了,由”items属性是tmenuitem类型,而在此类型中还有一个属性,是items”此句话的意思我们可以创建菜单项,代码如下:1:新建一个工程。2:添加一个tmainmenu控件。3:添加一个button控件,并在button的onclick事件中写入如下代码:procedure TForm1.Button1Click(Sender: TObject);varfiles,edit:tmenuitem;new,copy:tmenuitem;beginfiles:=tmenuitem.Create(self);edit:=tmenuitem.create(self);files.Caption:=’文件’;edit.caption:=’编辑’;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;运行效果和上面菜单结构表中基本一样,但此时点击菜单项时不出现任何的事件,显然这样的软件出售量不算理想,我们可以略改代码加个事件上去。代码如下:1:新建一个工程。2:添加一个tmainmenu控件。3:privateprocedure abc(sender:tobject);{ Private declarations }varForm1: TForm1;implementation{$R *.DFM}procedure tform1.abc(sender:tobject);beginshowmessage(’welcome you click me!! :) xixi’);end;procedure TForm1.Button1Click(Sender: TObject);varfiles,edit:tmenuitem;new,copy:tmenuitem;beginfiles:=tmenuitem.Create(self);edit:=tmenuitem.create(self);files.Caption:=’文件’;edit.caption:=’编辑’;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:=’拷贝’;copy.OnClick:=abc;new.OnClick:=abc;files.Add(new);edit.add(copy);{上部代码为创建菜单项}end;这时这个软件就有了交互的功能。有时菜单项中出现一个横的条线和出现一个子的菜单,那么这样的效果怎么用代码实现的呢,下面就是此效果的代码示例:1:新建一个工程。2:添加一个tmainmenu控件。3:procedure TForm1.Button1Click(Sender: TObject);varfiles,edit:tmenuitem;new,copy:tmenuitem;sub1,sub2,sub3,lines:tmenuitem;beginfiles:=tmenuitem.Create(self);edit:=tmenuitem.create(self);files.Caption:=’文件’;edit.caption:=’编辑’;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);{上部代码为创建菜单项}sub1:=tmenuitem.create(self);sub2:=tmenuitem.create(self);sub3:=tmenuitem.create(self);lines:=tmenuitem.create(self);lines.caption:=’-’;sub1.caption:=’子菜单1’;sub2.caption:=’子菜单2’;sub3.caption:=’子菜单3’;new.Add(sub1);new.add(lines);new.add(sub3);copy.Add(sub2);{上面代码出现多项子菜单和横线的效果}end;到此讨论的内容就要结束,菜单的创建在Delphi中是非常简单的事,在tmenuitem类中还有许多的事件和方法及属性,如Add,Clear,Click,Create,Delete,Destroy,Find,IndexOf,Insert,Remove等方法的使用都是非常简单的,后祝所有的朋友身体健康。 文章作者:高红岩(ghygh 文章来源:原创 作者邮箱:[email protected] 作者网站:暂无 浏览次数:310 PopupMenu1 := TPopupMenu.Create(Self); with PopUpMenu1.Items do begin Add(NewItem('First Menu',0,False,True,MenuItem1Click,0,'MenuItem1')); Add(NewItem('Second Menu',0,False,True,MenuItem2Click,0,'MenuItem2')); Add(NewItem('Third Menu',0,False,True,MenuItem3Click,0,'MenuItem3')); Add(NewLine); // 增加一个分割棒 Add(NewItem('Fourth Menu',0,False,True,MenuItem4Click,0,'MenuItem4')); ONMESSAGE问题 大家过来帮帮忙啊 求简单算法啦,我只有300多分,全用了吧 C/S 问题 TDBCHART 怎用 在美国,在5分钟内能回答出这道题的人,平均年薪在20万美金 有什么方法可以知道系统当前的操作系统? 关于listview控件的问题? 数据库连接 问题看似简单,却难解决!!不信,您试一试/delphi 我用以下SQL语句从一个表中查找出来一些数据,想将这些数据添加到另一个表中,应该怎样写SQL? 在线等待,马上给分!
动态创建菜单全接触
高红岩(ghyghost)基本认识:
在Delphi的程序开发环境中,封装的VCL减化了我们许多的开发工作,由在界面的设计上使开发的进度很快,但在很多的时候,我们需要自己来设计可视化的用户界面,而且是在程序的运行中,这时我们就得利用Delphi给我们提供的类来完成我们需要的工作了,下面笔者就和朋友们浅入的讨论一下动态创建”菜单”的基本知识,希望本文给那些刚入门的朋友来个抛砖引玉的作用。
在delphi的菜单设计中,有两个Delphi的菜单控件:
1:Tmainmenu;
2:Tpopupmenu;
前者是创建窗口的菜单,后者是创建右键弹出式菜单的控件,但在Delphi庞大的类库中有一个类与这两个控件密切相关,它就是:TMenuItem,窗口的菜单和右键弹出式菜单的每个条目都是TMenuItem类的一个对象。此TMenuItem类不出现在控件板上,在程序中用代码可创建其实例。
基本知识:
在tmainmenu,tpopupmenu控件中有一个属性是items,此属性是数组型,里面的参数为菜单项的索引值。
文件 编辑 查看 插入 格式 帮助
---- ---- ---- ---- ---- ----
新建 撤消 标尺 对象 字体 关于
打开 拷贝 源码 公式 颜色 相信您看过上面的菜单简单表示之后是非常熟悉的,在此菜单中菜单头的索引值代表如下:
”文件”的菜单的items值为0;
”编辑”的菜单的items值为1;以此类推。
items属性是tmenuitem类型,而在此类型中还有一个属性,是items,如果您略懂”类”的关系,您就不难明白此类似”嵌套”的关系。”新建”菜单选项是”文件”菜单选项的子类,用代码表示为tmainmenu.items[0].items[0],”打开”菜单选项为tmainmenu.items[0].items[1],以此类推,而代表”编辑”菜单中的”拷贝”菜单选项的代码为tmainmenu.items[1].items[1],其它菜单代码表示以此类推。基本实例:
知道了菜单的items结构之后,我们就可以进一步大胆的创建自己有序的菜单了。
上面讨论到窗口的菜单和右键弹出式菜单的每个条目都是TMenuItem类的一个对象。那么我们就可以create它的一个实例,来添加自己想要的菜单了。
示例过程:
1:新建一个工程。
2:添加一个tmainmenu控件。
3:添加一个button控件,并在button的onclick事件中写入如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var
files,edit:tmenuitem;{要有实例的声明}
begin
files:=tmenuitem.Create(self);
edit:=tmenuitem.create(self);
files.Caption:=’文件’;
edit.caption:=’编辑’;
mainmenu1.AutoHotkeys:=mamanual;{此句代码为不让系统自动设置快捷键}
form1.MainMenu1.Items.Add(files);
form1.mainmenu1.items.add(edit);
end;
运行后,出现如上面例举的菜单的部分结构,如此看来动态创建菜单项的方法是非常简单的,这无疑于Delphi把系统的函数进行了封装。菜单头我们创建完了,接下来就该创建菜单里的菜单项了,由”items属性是tmenuitem类型,而在此类型中还有一个属性,是items”此句话的意思我们可以创建菜单项,代码如下:
1:新建一个工程。
2:添加一个tmainmenu控件。
3:添加一个button控件,并在button的onclick事件中写入如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var
files,edit:tmenuitem;
new,copy:tmenuitem;
begin
files:=tmenuitem.Create(self);
edit:=tmenuitem.create(self);
files.Caption:=’文件’;
edit.caption:=’编辑’;
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;
运行效果和上面菜单结构表中基本一样,但此时点击菜单项时不出现任何的事件,显然这样的软件出售量不算理想,我们可以略改代码加个事件上去。
代码如下:
1:新建一个工程。
2:添加一个tmainmenu控件。
3:
private
procedure abc(sender:tobject);
{ Private declarations }
var
Form1: TForm1;implementation{$R *.DFM}procedure tform1.abc(sender:tobject);
begin
showmessage(’welcome you click me!! :) xixi’);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
files,edit:tmenuitem;
new,copy:tmenuitem;
begin
files:=tmenuitem.Create(self);
edit:=tmenuitem.create(self);
files.Caption:=’文件’;
edit.caption:=’编辑’;
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:=’拷贝’;
copy.OnClick:=abc;
new.OnClick:=abc;
files.Add(new);
edit.add(copy);
{上部代码为创建菜单项}
end;
这时这个软件就有了交互的功能。
有时菜单项中出现一个横的条线和出现一个子的菜单,那么这样的效果怎么用代码实现的呢,下面就是此效果的代码示例:
1:新建一个工程。
2:添加一个tmainmenu控件。
3:
procedure TForm1.Button1Click(Sender: TObject);
var
files,edit:tmenuitem;
new,copy:tmenuitem;
sub1,sub2,sub3,lines:tmenuitem;
begin
files:=tmenuitem.Create(self);
edit:=tmenuitem.create(self);
files.Caption:=’文件’;
edit.caption:=’编辑’;
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);
{上部代码为创建菜单项}
sub1:=tmenuitem.create(self);
sub2:=tmenuitem.create(self);
sub3:=tmenuitem.create(self);
lines:=tmenuitem.create(self);
lines.caption:=’-’;
sub1.caption:=’子菜单1’;
sub2.caption:=’子菜单2’;
sub3.caption:=’子菜单3’;
new.Add(sub1);
new.add(lines);
new.add(sub3);
copy.Add(sub2);
{上面代码出现多项子菜单和横线的效果}
end;
到此讨论的内容就要结束,菜单的创建在Delphi中是非常简单的事,在tmenuitem类中还有许多的事件和方法及属性,如Add,Clear,Click,Create,Delete,Destroy,Find,IndexOf,Insert,Remove等方法的使用都是非常简单的,后祝所有的朋友身体健康。
文章作者:高红岩(ghygh
文章来源:原创
作者邮箱:[email protected]
作者网站:暂无
浏览次数:310
with PopUpMenu1.Items do
begin
Add(NewItem('First Menu',0,False,True,MenuItem1Click,0,'MenuItem1'));
Add(NewItem('Second Menu',0,False,True,MenuItem2Click,0,'MenuItem2'));
Add(NewItem('Third Menu',0,False,True,MenuItem3Click,0,'MenuItem3'));
Add(NewLine); // 增加一个分割棒
Add(NewItem('Fourth Menu',0,False,True,MenuItem4Click,0,'MenuItem4'));