我是个新手,不只从和下手,只是能把treeview建立成PopupMenu,
那个图片是某软件的截图,我想作成那样旧可以,但是我比较菜,不只从和下手啊

解决方案 »

  1.   

    procedure TForm1.AddPopMenu(PMenu:TMenuItem);
    var
      i : Integer;
      myMenu : TMenuItem;
    begin
       //这儿加上递归结束的条件
          myMenu := TMenuItem.Create(self);
          myMenu.Caption := '...';
          PMenu.Insert(myMenu.Count,myMenu);
          AddPopMenu(myMenu);
    end;
      

  2.   

    其实liang_z(千山一刀之忍者神龟) 说得很清楚了!
    为了方便你理解,这里我写了实例,你只用建个新project
    并在form的onmouseup里写下以下代码,可以看看效果!
    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      tpm:TPopupMenu;
      mit,mit1,mit2:TMenuItem;
      tp:TPoint;
    begin
      if Button=mbRight then begin
        tpm:=TPopupMenu.Create(Self);
        mit:=TMenuItem.Create(tpm);
        mit.Caption:='Test 1';
        tpm.Items.Insert(0,mit);
        mit1:=TMenuItem.Create(tpm);
        mit1.Caption:='Test 2';
        mit.Insert(0,mit1);    mit2:=TMenuItem.Create(tpm);
        mit2.Caption:='Test 3';
        mit1.Insert(0,mit2);    tp.x:=X; tp.y:=Y;
        tp:=ClientToScreen(tp);
        tpm.Popup(tp.x,tp.y);
      end;
    end;
      

  3.   

    这个我明白
    我现在的难题是,我已经把treeview动态创建成了菜单,但是listview并没有,你看看那个截图的连接旧明白了,我想要得是那种效果,我的treeview的每个节点名称就是相应的数据库表名,listview就是相应表的字段!
      

  4.   

    你看看那个图片啊,
    比如我有adotable ,treeview,listview,
    treeview显示的是adotable所有表的内容
    listview显示的是treeview相应节点名称=adotable.tablename,
    现在想实现动态菜单,把treeview和list结合起来,
      

  5.   

    上面的不对应该市:
    你看看那个图片啊,
    比如我有adotable ,treeview,listview,
    treeview显示的是adotable所有表的名字
    listview显示的是treeview相应节点名对应表名的字段
    现在想实现动态菜单,把treeview和list结合起来
      

  6.   

    或者是菜单的第一层是treeview的第一层,第二层是listview的内容(从数据库读出)和treeview的第二层,异词类推
      

  7.   

    to zwjchina(蒲石) 
    oicq:3950496,如果不嫌弃我是个菜鸟,加我,这样快一点
      

  8.   

    我明白你的意思了!那么这样,我们先不管TPopupMenu而只注意TMenuItem
    对于TreeView我们从根开始建立TMenuItem
    就以你说的图为例子
    "网站地址"对应MenuItem1
    然后"电脑类"对应MenuItem2(当然是MenuItem的子Item)
    往下推,到"下载软件网站"时读库继续建立其子Item以上可以做到吧?
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      level:integer;
      treenode:ttreenode;
      menuitem:tmenuitem;
      procedure addmenu(var item:ttreenode;var menuitems:tmenuitem;level:integer);
      var
        i:integer;
        treenode:ttreenode;
        menuitem:tmenuitem;
      begin
        for i:=0 to item.Count-1 do
        if item.Item[i].Level=level then
        begin
          treenode:=item.Item[i];
          menuitem:=tmenuitem.Create(self);
          menuitem.Caption:=treenode.Text;      menuitems.Add(menuitem);
          if treenode.HasChildren then
            addmenu(treenode,menuitem,level+1);
        end;
      end;
    begin
    PopupMenu1.Items.Clear;
      level:=0;
      for i:=0 to treeview1.items.Count-1 do
      if treeview1.Items[i].Level=level then
        begin
          treenode:=treeview1.Items[i];
          menuitem:=tmenuitem.Create(self);
          menuitem.Caption:=treenode.Text;      PopupMenu1.items.Add(menuitem);
          if treenode.HasChildren then
            addmenu(treenode,menuitem,level+1);
        end;
    end;
    我用的是这种方法实现treeview创建的菜单