CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

求动态生成tmenu代码!!

楼主zlheadof(小N)2004-12-01 12:28:28 在 Delphi / VCL组件开发及应用 提问

求动态生成tmenu代码!! 问题点数:50、回复次数:6Top

1 楼ghyghost(爱国人士-许愿池里的希腊老石头)回复于 2004-12-01 12:51:42 得分 25

动态创建菜单全接触  
                     高红岩(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等方法的使用都是非常简单的.  
   
  ???Top

2 楼sailxia(小帆)回复于 2004-12-01 12:52:16 得分 25

var  
      i:integer;  
      s,j:string;  
      Mnu,SubMnu:TMenuItem;  
  begin  
      j:=Edit1.Text;  
      if   Length(j)=0   then   Exit;  
      for   i:=1   to   length(j)   do   begin  
      s:=   j[i];  
      combobox1.Items.Add(s);  
      SubMnu:=TMenuItem.Create(self);  
      SubMnu.Caption   :=j[i];  
      SubMnu.Tag   :=i;  
      SubMnu.OnClick   :=MyClick;  
      PopupMenu1.Items.Add(subMnu);  
      end;  
   
  procedure   TForm1.MyClick(Sender:   TObject);  
  var  
      i:integer;  
      s:string;  
  begin  
      i:=(sender   as   TMenuItem).Tag   ;  
      s:=IntToStr(i);  
      showmessage(s);  
  end;Top

3 楼sheepchang(一曲肝肠断,天涯何处觅知音。)回复于 2004-12-01 12:57:45 得分 0

新建DELPHI群7322920欢迎大家加入,一起提高!Top

4 楼surpassable()回复于 2004-12-01 16:04:26 得分 0

mark~~~~  
  学习~~Top

5 楼whbo(王红波(年轻人,要有所作为))回复于 2004-12-01 18:51:22 得分 0

mark;Top

6 楼xiyixiaowm50(独孤求败)回复于 2004-12-01 18:59:56 得分 0

gzTop

相关问题

  • 如何用代码在运行时动态生成代码?
  • PB中动态生成的控件能不能动态生成代码?
  • 如何动态生成汉字,要直接用代码就可以生成的
  • 如何动态生成汉字,要直接用代码就可以生成的
  • 代码生成
  • 关于动态生成js代码的问题`
  • 公布一段动态生成按钮button的代码
  • 求ASP.NET生成动态网页的代码,在线等.
  • 求ASP.NET生成动态网页的代码,在线等.
  • 求动态表格生成代码(在线)

关键词

  • 代码
  • 控件
  • 属性
  • 拷贝
  • 文件
  • 选项
  • tmenuitem
  • 菜单
  • 菜单项
  • tmainmenu

得分解答快速导航

  • 帖主:zlheadof
  • ghyghost
  • sailxia

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo