如题!

解决方案 »

  1.   

    这个是两层的遍历,多层的因该用递归算法,你自己写写看,不难得
    var
      i, j: integer;
      node: TTreenode;
    begin
      for i := 0 to MainMenu1.Items.Count - 1 do
      begin
        node := TreeView1.Items.Add(nil, MainMenu1.Items[i].Caption);
        for j := 0 to mainmenu1.Items[i].Count - 1 do
        begin
          TreeView1.Items.Addchild(node, mainmenu1.Items[i].Items[j].Caption);
        end;
      end;end;
      

  2.   

    递归算法的,拿去!type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
       ...
        Button1: TButton;
        TreeView1: TTreeView;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        procedure AddAMenuItem(AMenuItem:TMenuItem;ANode:TTreeNode);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.AddAMenuItem(AMenuItem: TMenuItem;aNode:TTreeNode);
    var
      i,j,k:Integer;
      s:String;
      curNode:TTreeNode;
    begin
      curNode := nil;
      s:=AMenuItem.Caption; //取菜单项的标题!
      k:=Pos('&',s);
      if k > 0 then
        Delete(s,k,1); //删除菜单项标题中的“&”符
      if s <> '-' then //如果是菜单分隔符“-”就不处理!
        curNode := TreeView1.Items.AddChild(aNode,s);
      J:=AMenuItem.Count;
      if J > 0 then //有子菜单,就遍历
      for i := 0 to j - 1 do
      begin
        AddAMenuItem(AMenuItem.Items[i],curNode);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      a:Integer;
      aNode:TTreeNode;
    begin
      aNode := TreeView1.Items.GetFirstNode; //取Treeview的根
      for a := 0 to MainMenu1.Items.Count - 1 do
      begin
        AddAMenuItem(MainMenu1.Items[a],aNode);
      end;
    end;end.
      

  3.   

    for i := 0 to frm_main.ComponentCount -1 do begin
        if (Frm_main.Components[i] is TMenuItem) then begin
            showmessage((Frm_main.Components[i] as TMenuItem).Caption);   
        end;
      end;
      

  4.   

    for i := 0 to frm_main.ComponentCount -1 do begin
        if (Frm_main.Components[i] is TMenuItem) then begin
            showmessage((Frm_main.Components[i] as TMenuItem).Caption);   
        end;
      end;这个循环找不到TMenuItem组件哦
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to self.ComponentCount-1 do
        if self.Components[i] is TMenuItem then
          listbox1.Items.Add((self.Components[i] as TMenuItem).Caption);
    end;
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to self.ComponentCount-1 do
        if self.Components[i] is TMenuItem then
          listbox1.Items.Add((self.Components[i] as TMenuItem).Caption);
    end;ListBox1为空!!!
      

  7.   

    //我用了tactionList和mainmenu相结合...
    procedure TfrmMain.SetAction();
    var
    i: Integer;
    iTag:Integer;
    begin
    if G_bAdmin then
      for i:=0 to AlModule.ActionCount -1 do
          (AlModule.Actions[i] as TAction).Enabled :=G_bAdmin// and G_bTakeEffect
    else
      for i:=0 to AlModule.ActionCount -1 do
        begin
        iTag:= (AlModule.Actions[i] as TAction).Tag;
        //&Egrave;¨&Iuml;&THORN;±í&Ouml;&ETH;&Ecirc;&Ccedil;·&ntilde;&Oacute;&ETH;&acute;&Euml;&Auml;&pound;&iquest;é
       (AlModule.Actions[i] as TAction).Enabled :=
                   DModule.spUserRight.Locate('fModuleID',iTag,[]);
                   //and G_bTakeEffect;
        end;
      

  8.   

    procedure TForm1.BiuldMenu(const StrNodes: string;
      var MainMenu: TMainMenu);
    var
      i, j: Integer;
      Level: Integer;
      MenuStrs: string;
      ItemID: string;
      ItemName: string;
      StrLst: TStringList;
      Flag: Boolean;
      ParentID: Integer;
      PParentItem: ^TMenuITem;
    begin
      MenuStrs := StrNodes;
      StrLst := TStringList.Create;
      try
        StrLst.Text := StringReplace(MenuStrs, #8, #13#10, [rfReplaceAll]);
        FMenuItemCount := StrLst.Count;
        SetLength(FMenuItem, FMenuItemCount);   // FMenuItem定义为Private
        for i := 0 to StrLst.Count - 1 do
        begin
          FMenuItem[i] := TMenuITem.Create(nil);
          FMenuItem[i].Name := 'SubItem' + IntToStr(i);
        end;
        
        j := 0;
        PParentItem := nil;          // 为了使Delphi不提示警告, 其实一定会被赋值的;
        while SplitStr(MenuStrs, ItemName, ItemID) do
        begin
          Flag := False;
          with MainMenu do
          begin
            Level := Length(ItemID) div 2;
            if Level = 1 then
            begin
              FMenuItem[j].Tag := StrToInt(ItemID);
              FMenuItem[j].Caption := ItemName;
              FMainMenu.Items.Add(FMenuItem[j]);
              FMenuItem[j].OnClick := TestClick;
              Inc(j);
              Continue;
            end
            else begin
            for i := 0 to Items.Count - 1 do
              if Items[i].Tag = StrToInt((Copy(ItemID,1,Level * 2 -2))) then
              begin
                FMenuItem[j].Tag := StrToInt(ItemID);
                FMenuItem[j].Caption := ItemName;
                Items[i].Add(FMenuItem[j]);
                FMenuItem[j].OnClick := TestClick;
                inc(j);
                Flag := True;
              end;
            if Flag then Continue;
            if FMenuItem[j - 1].Tag = StrToInt(Copy(ItemID,1,Level * 2 -2)) then
            begin
              FMenuItem[j].Tag := StrToInt(ItemID);
              FMenuItem[j].Caption := ItemName;
              ParentID := j - 1;
              FMenuItem[ParentID].Add(FmenuItem[j]);
              PParentItem := @FMenuItem[ParentID];
              FMenuItem[j].OnClick := TestClick;
              inc(j);
              Continue;
            end;        if Length(IntToStr(FMenuItem[j - 1].Tag)) =
              Length(ItemID) then
            begin
              FMenuItem[j].Tag := StrToInt(ItemID);
              FMenuItem[j].Caption := ItemName;
              PParentItem^.Add(FMenuItem[j]);
              FMenuItem[j].OnClick := TestClick;
              inc(j);
            end;
          end;
        end;
      end;
      finally
        StrLst.Free;
      end;
    end;// 自己搞定的,只是与库结构和中间层返回的字符串格式有关.
    // 不过还是很多谢大家的,不管是骂我的还是帮我的,一起谢谢了!!!!