遍历加入memo1
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
begin
  memo1.lines.Clear;
  for i:=0 to MainMenu1.items.Count-1   do
  begin
  memo1.lines.add(MainMenu1.Items[i].Name);
    for j:=0 to MainMenu1.Items[i].Count-1 do
    begin
      memo1.lines.add(MainMenu1.Items[i].Items[i].Name)
    end;
  end;
end;

解决方案 »

  1.   

    非常感谢,可是您的程序运行有误!并且如何取出caption和name??谢谢
      

  2.   

    这个函数应该编成递归的:
    procedure OutputMenuItem( 
        mi: TMenuItem; // 该菜单项
        Level: Integer; // 级数
        Strings: TStrings // 要输出的字符串列表
        );
    var
      i: Integer; // 循环变量
    begin
      // 缩进的空格+名字+标题+ID
      Strings.Add( StringOfChar(' ', Level*2)
       + 'Name: '+mi.Name
       + '; Caption: '+mi.Caption
       +'; ID: '+ IntToStr(mi.Command) );
      
      // 输出它的子菜单  Inc( Level ); // 增加一级
      for i:=0 to mi.Count-1 do
        OutputMenuInfo( mi[i], Level, Strings ); // 对每个子项递归调用本过程
    end;procedure OutputMenu( 
        menu: TMenu; // 既可传TMainMenu也可传TPopupMenu
        Strings: TStrings // 要输出的字符串列表
        );
    begin
      OutputMenuItem( menu.Items, 0, Strings );
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      memo1.lines.Clear;
      OutputMenu( MainMenu );
    end; 
      

  3.   

    有点小错误,修正一下:
    procedure OutputMenuItem( 
        mi: TMenuItem; // 该菜单项
        Level: Integer; // 级数
        Strings: TStrings // 要输出的字符串列表
        );
    var
      i: Integer; // 循环变量
    begin
      // 缩进的空格+名字+标题+ID
      Strings.Add( StringOfChar(' ', Level*2)
       + 'Name: '+mi.Name
       + '; Caption: '+mi.Caption
       +'; ID: '+ IntToStr(mi.Command) );
      
      // 输出它的子菜单  Inc( Level ); // 增加一级
      for i:=0 to mi.Count-1 do
        OutputMenuItem( mi[i], Level, Strings ); // 对每个子项递归调用本过程
    end;procedure OutputMenu( 
        menu: TMenu; // 既可传TMainMenu也可传TPopupMenu
        Strings: TStrings // 要输出的字符串列表
        );
    begin
      OutputMenuItem( menu.Items, 0, Strings );
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      memo1.lines.Clear;
      OutputMenu( MainMenu, memo1.Lines );
    end;