procedure MenuToTreeView(mMenu: TMenu; mTreeView: TTreeView);
  procedure pMenuToTreeView(mMenuItem: TMenuItem; mTreeNode: TTreeNode);
  var
    I: Integer;
    vTreeNode: TTreeNode;
  begin
    for I := 0 to Pred(mMenuItem.Count) do begin
        vTreeNode := mTreeView.Items.AddChild(mTreeNode,
          StripHotkey(mMenuItem[I].Caption)); //StripHotkey()//除快捷键&
      pMenuToTreeView(mMenuItem[I], vTreeNode);
    end;
  end; { pMenuToTreeView }
begin
  mTreeView.Items.Clear;
  pMenuToTreeView(mMenu.Items, mTreeView.TopItem);
end; { MenuToTreeView }procedure TForm1.Button1Click(Sender: TObject);
begin
  MenuToTreeView(PopupMenu1, TreeView1);
end;

解决方案 »

  1.   

    procedure MenuToTreeView(mMenu: TMenu; mTreeView: TTreeView);
      procedure pMenuToTreeView(mMenuItem: TMenuItem; mTreeNode: TTreeNode);
      var
        I: Integer;
        vTreeNode: TTreeNode;
      begin
        for I := 0 to Pred(mMenuItem.Count) do begin
          vTreeNode := mTreeView.Items.AddChildObject(mTreeNode,
            StripHotkey(mMenuItem[I].Caption), mMenuItem[I]); //StripHotkey()//除快捷键&
          pMenuToTreeView(mMenuItem[I], vTreeNode);
        end;
      end; { pMenuToTreeView }
    begin
      mTreeView.Items.Clear;
      pMenuToTreeView(mMenu.Items, mTreeView.TopItem);
    end; { MenuToTreeView }procedure TForm1.Button1Click(Sender: TObject);
    begin
      MenuToTreeView(PopupMenu1, TreeView1);
    end;procedure TForm1.TreeView1Click(Sender: TObject);
    begin
      if not Assigned(TTreeView(Sender).Selected) then Exit;
      TMenuItem(TTreeView(Sender).Selected.Data).Click;
    end;
      

  2.   

    1、如何控制菜单的visible:即如果菜单visible=false则不创建,包括孩子也不创建。
    2、单击事件用指针好象有问题,你有没有试过?
      

  3.   

    //自己发挥发挥吧
    procedure MenuToTreeView(mMenu: TMenu; mTreeView: TTreeView);
      procedure pMenuToTreeView(mMenuItem: TMenuItem; mTreeNode: TTreeNode);
      var
        I: Integer;
        vTreeNode: TTreeNode;
      begin
        for I := 0 to Pred(mMenuItem.Count) do
          if mMenuItem[I].Visible then begin
            vTreeNode := mTreeView.Items.AddChildObject(mTreeNode,
              StripHotkey(mMenuItem[I].Caption), mMenuItem[I]); //StripHotkey()//除快捷键&
            vTreeNode.ImageIndex := mMenuItem[I].ImageIndex;
            vTreeNode.SelectedIndex := mMenuItem[I].ImageIndex;
            pMenuToTreeView(mMenuItem[I], vTreeNode);
          end;
      end; { pMenuToTreeView }
    begin
      mTreeView.Items.Clear;
      pMenuToTreeView(mMenu.Items, mTreeView.TopItem);
    end; { MenuToTreeView }procedure TForm1.FormCreate(Sender: TObject);
    begin
      MenuToTreeView(PopupMenu1, TreeView1);
    end;