像Windows 的资源管理器,当Treeview 的一个节点获得焦点时,如果我们用右键点击另一个节点,查看属性等,看到的是右键点击的那个节点的信息,并不是之前焦点所在的节点的信息。---这个是正常的,Treeview 就是这个特性。
    我想请教,在用 Delphi 编程时,怎样做成这个特性,我好像只能得到焦点所在的节点的信息,每次必须把焦点定到一个节点,才能按鼠标右键。

解决方案 »

  1.   

    呵呵,看我的。
    procedure TfrmView.TreeView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      trend: TTreeNode;
    begin
      if Button = mbRight then
      begin
        trend := TreeView1.GetNodeAt(X, Y);
        if trend <> nil then
        begin
         //做你想做的。
        ShowMessage(trend.Text);
        end;
      end;
    end;
      

  2.   

    谢谢!你这样做能达到我说的效果,是因为你弹出的是一个 Message 框,我原来测试的时候发现了。
    但是,如果打开一个窗口,在窗口里取 treeview 里的节点的值的时候,用 ...Treeview1.Selected...,就不对了,不能取到右键点击的节点的有关信息。
      

  3.   

    --Unit1(Form1)的相关代码:----------------------
    procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      oNode: TTreeNode;
    begin
      if Button=mbRight then
      begin
        oNode := TreeView1.GetNodeAt(X, Y);
        if oNode<>nil then
        begin
          //做你想做的。
          //ShowMessage(oNode.Text);
          OKBottomDlg.ShowModal;
        end;
      end;
    end;--OKBottomDlg的相关代码:----------------------
    procedure TOKBottomDlg.FormActivate(Sender: TObject);
    begin
      Edit1.Text := Form1.TreeView1.Selected.Text;
    end;Edit1.Text 的内容不是点击右键时的节点的 Text,而是另一个先前点击鼠标左键选择的节点的 Text。
    但是,ShowMessage(oNode.Text) 语句显示的是点击右键时的节点的 Text! 
      

  4.   

            if   oNode <> nil   then 
            begin
               oNode.Selected:=true;                //选中它
                oNode.Focused:=true;                 //获取焦点     
                //做你想做的。 
            end; 
      

  5.   

    我试了下,应该加在mousedown事件中比较好
      

  6.   

    在MouseDown中保存鼠标右击时的位置,根据位置得到节点。并不要每次都将右击的节点设置为焦点节点。
      

  7.   

    已解决,找到2种方法,一种方法见文章:http://www.why100000.com/_articles/show_a_article.asp?tab=tabDelphi&autoid=98另一种方法是:在点击右键后,首先马上把右键点击的节点保存为一个全局变量,我成为“当前节点”。以后会有2种节点,一种是selected 节点,另一种是“当前节点”,分别操作它们,就可以了。