while not adosheng.Eof do
 begin   f:=tmenuitem.Create(self);
   f.Caption:=adosheng.Fieldbyname('sheng').AsString;
   mainmenu1.Items.Add(f);
   adodiqu.Filter:='sheng='+''''+adosheng.Fieldbyname('sheng').AsString+'''';
   adodiqu.Filtered:=true;
   adodiqu.First;
    while not adodiqu.Eof do
      begin
        s:=tmenuitem.Create(self);
        s1:=adodiqu.Fieldbyname('diqu').AsString;
        s.Caption:=s1;
        f.Add(s);
        adopindao.Filter:='diqu='+''''+s1+'''';
        adopindao.Filtered:=true;
        adopindao.First;
我想问一下.上述的代码是如何菜单名称加入的.我是菜鸟,请各位帮助

解决方案 »

  1.   

    f.Caption:=adosheng.Fieldbyname('sheng').AsString;
    s.Caption:=s1;---
    caption即名称
      

  2.   

    不好意思,我表达能力不好。我想问。该段代码的计算机处理过程是如何的。为什么使用了filter。就可以使到菜单对应加入?
      

  3.   

    其实这个问题很简单啊,就是一个简单的多级菜单动态建立的问题首先建立一个菜单项 f ,设置其 显示名称 ,然后添加到系统主菜单 mainmenu1 中然后设置 Filter ,就是把 f 下的子菜单过滤出来,然后顺次把 f 的子菜单添加到 f 下Filter 只是一种思路,可以直接通过查询得到子菜单列表的方式,这个主要是看动态建立菜单的数据表如何规划,但显然你所列的这种规划并不是特别好,因为是根据菜单项的 caption 过滤的,而这个玩意会重复,通过Name或者一个上级菜单编号的方式最好,但是很明显,并没有采取这种方案。
      

  4.   

    //创建菜单项对象   
    f:=tmenuitem.Create(self);
    //对象的标题从数据表的sheng字段读取
    f.Caption:=adosheng.Fieldbyname('sheng').AsString;
    //将该菜单项添加到主菜单中
    mainmenu1.Items.Add(f);
    //以sheng字段设置过滤条件(应该是从子菜单表中选择sheng菜单项的子菜单项阴该adodiqu.Filter:='sheng='+''''+adosheng.Fieldbyname('sheng').AsString+'''';
    adodiqu.Filtered:=true;
    //游标移动到首行
    adodiqu.First;
    //循环操作
    while not adodiqu.Eof do
    begin
      //创建菜单(暂时叫它子菜单diqu)项对象
      s:=tmenuitem.Create(self);
      //取到子菜单的标题名字付给子菜单标题
      s1:=adodiqu.Fieldbyname('diqu').AsString;
      s.Caption:=s1;
      //添加在上面添加的sheng菜单项中
      f.Add(s);
      //添加子菜单diqu的子菜单....后面还要添加diqu子菜单的子菜单....子菜单的子菜单的子菜单....菜单层数较多的时候,这个循环非常变得臃肿而且效率低下,非常差劲的循环
      adopindao.Filter:='diqu='+''''+s1+'''';
      adopindao.Filtered:=true;
      adopindao.First;
      

  5.   

    该说的都被各楼上的说了 我就说说f:=tmenuitem.Create(self);这个地方运用的不足吧 在Create一个对象的时候最好加入异常保护f:=tmenuitem.Create(self);
    try
      //写你所想实现的代码
    finally
      f.free;
    end;