总的思路是在ONMOUSEDOWN中处理右键点击事件。
以下是我写的一些代码,可参考procedure TForm.TreeView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  AnItem: TTreeNode;
  HT: THitTests;
  MouseDownX,MouseDownY: Integer;
  ClickedOK:Boolean;
  NewString:String;
begin
  if Button=mbRight then
    Begin
        if TreeView1.Selected = nil then Exit;
        HT := stTreeView.GetHitTestInfoAt(X, Y);
        if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
          Begin
            AnItem := TreeView1.GetNodeAt(X, Y);
            if AnItem<>nil then
              Begin
                AnItem.Selected:=True;
              end;
          end;
    end;
end;

解决方案 »

  1.   

    在ONMOUSEDOWN中处理鼠标点击右键
    procedure TForm.TreeView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      AnItem: TTreeNode;
      HT: THitTests;
      MouseDownX,MouseDownY: Integer;
      ClickedOK:Boolean;
      NewString:String;
    begin
      if Button=mbRight then
        Begin
            if TreeView1.Selected = nil then Exit;
            HT := stTreeView.GetHitTestInfoAt(X, Y);
            if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
              Begin
                AnItem := TreeView1.GetNodeAt(X, Y);
                if AnItem<>nil then
                  Begin
                    AnItem.Selected:=True;
                  end;
              end;
        end;
    end;
      

  2.   

    在OnMouseDown事件中通过TreeView的GetNodeAt方法判断当前的位置是否有节点,如果有则通过Selected属性选择该节点。
      

  3.   

    TreeView 不是有一个rightClickSelect 的属性吗?可以选择啊,你的意思是什么呢
      

  4.   

    非常同意 zhaofansym(zhaofansym),他的没有错。