想实现这样一个功能将现有程序的菜单以树的形式显示出来,并且在通过点击该树时即触发(菜单click)事件。注意该菜单可能为多级,如何处理?
多谢各位了.

解决方案 »

  1.   

    TreeView可以实现。
    设置菜单Tag(例如:10000000四级菜单)值来确定其节点。
    10 00 00 00
      

  2.   

    //将菜单写进树,你在以下代码的基础上稍改就可以了啊
    procedure Tmainform.N16Click(Sender: TObject);
      procedure getsub(submenu:Tmenuitem;pid:string;subtree:Ttreenode);
      var
        j:integer;
        itemcount:integer;
        childtree:Ttreenode;
      begin
          itemcount:=submenu.Count;
          for j:=0 to itemcount-1 do
          begin
            if (submenu.Items[j].Caption<>'-') and (submenu.Items[j].Enabled) then
               childtree:=tv_1.Items.AddChild(subtree,submenu.items[j].Caption+'['+submenu.Items[j].Name+']');
               
            if submenu.Items[j].Caption=null then
               begin
                exit;
               end
              else
               begin
                getsub(submenu.Items[j],pid+submenu.Items[j].Name+'.',childtree);
               end;
          end;
      end;
    var
       tree:ttreenode;
    begin
        tree:=tv_1.Items.AddFirst(nil,'系统菜单');
        getsub(mainmenu1.Items,'',tree);
    end;
    //通过点击该树时即触发(菜单click)事件,有点麻烦,不过完全可以做的,只是分有点少了,哈哈
      

  3.   

    刚刚加了个指针来指向Tmenuitem对象,基本可以实现该功能,但对于父菜单及非click菜单,如何判断是否有click事件呢?(是不是通过这个函数访问啊?Assigned())
    不知道我说明白没有?