在treeView控件中,我右击其中的选项,弹出右键菜单,
要求其右键菜单的焦点在选中的选项上,
而不是只要我选中一个选项,在treeview控件中的其他位置右击都会弹出菜单
怎么做?

解决方案 »

  1.   

    使用GetNodeAt(x,y)判断当前鼠标位置是不是选择的项.
      

  2.   

    处理TREEVIEW的MOUSEDOWN,如果是右键,就先
    var
    tn:ttreenode;
    begin
    tn:=treeview.selected.data;
    如果要想好的应用,应是用一个
    type=record
      id:integer;
      name:string;
    end;来实现才行
    menu.add(tn.name);
    popmenu.pop;
      

  3.   

    象楼上说的
    应该在mousedown事件中手工的显示popmenu
      

  4.   

    应该处理MouseUp事件,而不是MouseDown事件。你可以在资源管理器中试一试!!!然后通过GetNodeAt方法得到鼠标所在位置是否有节点,注意这里可能要进行坐标转换,如果有就使用PopupMenu的Pop方法显示弹出菜单!!!
      

  5.   

    好像在treeview控件中点击右键不能选中节点,所以要根据GetNodeAt(x,y)判断当前鼠标位置是不是选择的项。
      

  6.   

    procedure TUserManageForm.LstRegManagerMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    { 在User TreeView上点右键时的处理过程 }
    var
      vNode: TTreeNode;
    begin
      if Button = mbRight then // 如果是右键
      begin
          vNode := lstRegManager.GetNodeAt(x, y); // 在x,y的位置上找这个节点
          if vNode <> nil then // 如果有选定的节点
          begin
            vNode.Selected := True;
            pmUserManager.PopupFromCursorPos; // 弹出菜单
          end;
      end;
    end; {LstRegManagerMouseDown}