实在不知道该怎么改了  下面的代码只能创建菜单的大项(比如 “文件”..“打开”..“新建”的“文件”那一项) 可是哦想在这个大项下加几个小项(“文件”..“打开”..“新建”的“新建”那一项) 然后单击事件也是在小项里进行的  哥哥姐姐们教教啊procedure TForm1.FormCreate(Sender: TObject);
var a:TMenuItem;
begin
  a:=TMenuItem.Create(self);
  a.Caption:='自定义菜单';
  a.OnClick:=MyProc;
  MainMenu1.Items.Add(a);
end;procedure TForm1.MyProc(Sender: TObject);
begin
  //
end;  

解决方案 »

  1.   

    建小项这样MainMenu1.Items[0].Add(a);表示在第一项大项下建了一个小项。依次类推
      

  2.   

    再第二层建小项可以这样MainMenu1.Items[0].Items[0].Add(a);
    中括号中的数字可以改变,表示不同的层次不同的项
      

  3.   

    在窗体上放一个MainMenu很麻烦么?
    多此一举
      

  4.   

    procedure TfrmMain.LoadmnuSessList;
    var
      tTemp: TADODataSet;
      tTempSub: TADODataSet;
      strTemp: TStringList;
      sTemp: String;
      i: Integer;
      sSubCaption, sSubName: String; 
    begin
      //
      tTemp := TADODataSet.Create(Self);
      tTempSub := TADODataSet.Create(Self);
      strTemp := TStringList.Create;
      try
        tTemp.Connection := ADO;
        tTempSub.Connection := ADO;    SelectData(tTemp, 'select * from SessionList');
        if tTemp.Active and not (tTemp.Bof and tTemp.Eof) then
        begin
          tTemp.First;
          while not tTemp.Eof do
          begin
            mnuSessListNew := TMenuItem.Create(mnuSessList);
            mnuSessListNew.Caption := tTemp.fieldbyname('SessName').AsString;
            mnuSessListNew.Name := 'mnuSessList' + tTemp.fieldbyname('SessID').AsString;        sSubCaption := '一步到位';
            sSubName := mnuSessListNew.Name + 'OneStep';
            mnuSessListNew.Add(NewItem(sSubCaption, 0, False, True, nil, 0, sSubName));
            mnuSessListNew.Add(NewLine);
            sTemp := tTemp.fieldbyname('SessStep').AsString;
            strTemp.Text := StringReplace(sTemp, ',', #13#10, [rfReplaceAll]);
            if strTemp.Count > 0 then
            begin
              for i := 0 to strTemp.Count - 1 do
              begin
                SelectData(tTempSub, 'select * from SQLList where SQLID = ' + strTemp.Strings[i]);
                sSubCaption := tTempSub.fieldbyname('SQLName').AsString;
                sSubName := mnuSessListNew.Name + tTempSub.fieldbyname('SQLID').AsString;
                mnuSessListNew.Add(NewItem(sSubCaption, 0, False, True, mnuSessListSubClick, 0, sSubName));
              end;
            end;        mnuSessList.Add(mnuSessListNew);
            tTemp.Next;
          end;
        end;
      finally
        tTemp.Free;
        tTempSub.Free;
        strTemp.Free;
      end;
    end;
      

  5.   

    顶一下,是不是有Parent之类的?
      

  6.   

    下面是我在一个项目中写的源码,楼主不妨参考一下
    Function TVTSMenuII.DisplaySubMenus(ParentIndex:integer;TopMenu : TMenuItem):Boolean;
    var
        i :integer ;
        tmpitem : TMenuItem;
    begin
        Result := false ;
        for i := 0 to count - 1 do
        begin
            if Items[i].Flag then continue ;
            if Items[i].UpMenuID = Items[ParentIndex].MenuID then
            begin
                tmpitem := TMenuItem.Create(TopMenu.Owner);
                tmpitem.Caption := Items[i].MenuText;
                tmpitem.Name := Items[i].MenuName ;
                tmpitem.Visible := true ;
                tmpitem.Enabled := true ;
                tmpitem.GroupIndex := Items[i].GroupIndex ;
                TopMenu.Add(tmpitem);
                Items[i].Flag := true ;
                if Items[i].ProcName <> '' then
                    tmpitem.OnClick := TMenuProcs.GetProc(Items[i].ProcName ,tmpitem);
                DisplaySubMenus(i, tmpitem);
                Result := true ;
            end;
        end;
    end;