递归搜索一下每个MenuItem,然后加上它们的TMenuItem.Count

解决方案 »

  1.   

    itmes.countchechey怎么改成“我爱洁洁”了,洁洁是哪位大小姐?
      

  2.   

    其实最简单,最方便的方法是这个:
    function CountMenuItem(AForm: TForm): Integer;
    var
      i: Integer;
    begin
      Result := 0;
      for i := 0 to AForm.ComponentCount - 1 do
        if AForm.Components[i] is TMenuItem then
          Inc(Result);
    end;
      

  3.   

    这里有个递归算法参考一下
    //==============================================================================
    //'菜单'解构成'树'(Recursion为递归)*********************************************
    //==============================================================================
    procedure MenuToTree(Menu: TMenu; var Tree: TTreeView; DestinationNode: TTreeNode; Expand: Boolean);
      procedure RecursionTree(MenuItem: TMenuItem; TreeNode: TTreeNode);
      var i: Integer;
          Node: TTreeNode;
      begin
        for i:=1 to GetMenuItemCount(MenuItem.Handle) do
          if MenuItem.Items[i-1].Caption<>'-' then
          begin
            Node := Tree.Items.AddChild(TreeNode,MenuItem.Items[i-1].Caption);
            Node.Data := Pointer(MenuItem.Items[i-1].Name);
            RecursionTree(MenuItem.Items[i-1],Node);
          end;
      end;
    var i: Integer;
        Node: TTreeNode;
    begin
      for i:=1 to GetMenuItemCount(Menu.Handle) do
      begin
        Node := Tree.Items.AddChild(DestinationNode,Menu.Items[i-1].Caption);
        Node.Data := Pointer(Menu.Items[i-1].Name);
        RecursionTree(Menu.Items[i-1],Node);
        if Expand then Tree.FullExpand else Tree.FullCollapse;
      end;
    end;
      

  4.   

    procedure TForm1.MenuItemClick(Sender: TObject);
    var
      vMenuItem: TMenuItem;
      S: string;
    begin
      vMenuItem := TMenuItem(Sender);
      S := '';
      while Assigned(vMenuItem) do begin
        //S := StripHotkey(vMenuItem.Caption) + '\' + S;
        S := IntToStr(vMenuItem.MenuIndex) + '\' + S;
        vMenuItem := vMenuItem.Parent;
      end;
      Delete(S, 1, 1);
      Delete(S, Length(S), 1);
      Caption := S;
    end;