//通过TreeView1建立菜单MainMenu1procedure TForm1.Button1Click(Sender: TObject);
var
  CurNode: TTreeNode;
  MainMenus: Array of TMenuItem;
  I: Integer;
begin
  I := 1;
  CurNode:=TreeView1.Items[0];
  Repeat
    SetLength(MainMenus, I);
    MainMenus[I] := TMenuItem.Create(Self);
    MainMenus[I].Caption := CurNode.Text;
    MainMenu1.Items.Add(MainMenus[I]);
    if CurNode.HasChildren  then
      SearchTreeView(CurNode, MainMenus[I]);
    Inc(I);
    CurNode := CurNode.getNextSibling;
  Until CurNode=nil;
end;procedure TForm1.SearchTreeView(FirstNode:TTreeNode; AMenu: TMenuItem);
var
   i,j:integer;
   TempMenu: TMenuItem;
begin
   if FirstNode.Count<>0 then
     for i:=0 to FirstNode.Count -1 do
     begin
       TempMenu := TMenuItem.Create(Self);
       TempMenu.Caption := FirstNode.Item[i].Text;
       AMenu.Add(TempMenu);
       if FirstNode.HasChildren then
         SearchTreeView(FirstNode.Item[i], TempMenu);
     end;
end;

解决方案 »

  1.   

    搞定,不需要递归!把treeview1的节点加到MainMenu1的file菜单下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
       NewItem,PItem: TMenuItem;
       I ,j,k,h: integer;
       str:string;
    begin
       NewItem := TMenuItem.Create(Self);
       NewItem.Caption :=treeview1.items[0].Text;
       MainMenu1.Items[0].Add(Newitem);
       for i:=1 to treeview1.items.Count-1 do
       begin
          NewItem := TMenuItem.Create(Self);
          NewItem.Caption :=treeview1.items[i].Text;
          if treeview1.Items[i].Parent=nil then
             MainMenu1.Items[0].Add(Newitem)
          else
          begin
          with MainMenu1 do
             for j:=0 to Items[0].Count-1 do
             begin
                str:=Items[0].items[j].Caption;
                if pos('&',Items[0].items[j].Caption)>0 then
                begin
                   str:=stringreplace(str,'&','',[rfReplaceAll,rfIgnoreCase]);
                   k:=pos('(',str)-1;
                   if k>0 then
                      str:=copy(str,1,k);
                end;
                if str=treeview1.items[i].Parent.Text then
                begin
                   Items[0].items[j].Add(Newitem);
                   break;
                end;
             end;
          end;
       end;
    end;
    请给分!谢谢!
      

  2.   

    哈哈wanwangzhiwang(万王之王) 你的程序必须有一个菜单项,且不能有三级以下菜单
    WuHeHai(河海)是正确的,只需改i:=0;
        SetLength(MainMenus, I+1);
      

  3.   

    WuHeHai(河海),wanwangzhiwang(万王之王) 谢谢你们,但我刚来不知如何给分