[DELPHI]TreeView精确定位到每一个ITEM

procedure TForm1.TreeView1Click(Sender: TObject);
var
  aPoint: TPoint;
  aNode: TTreeNode;
  aHitTest: THitTests;
begin
  if GetCursorPos(aPoint) then
  begin
    aPoint := TreeView1.ScreenToClient(aPoint);
    aHitTest := TreeView1.GetHitTestInfoAt(aPoint.X, aPoint.Y);

    //htOnItem, htOnButton, htOnIcon, htOnIndent, htOnLabel
    if not ((htOnItem in aHitTest)or (htOnLabel in aHitTest)) then  Exit;

    aNode := TreeView1.GetNodeAt(aPoint.X, aPoint.Y);
    if not Assigned(aNode) then  Exit;

    //test: Caption := aNode.Text;
    //do your code
  end;
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  aNode: TTreeNode;
begin
  aNode := TreeView1.GetNodeAt(X, Y);
  if not Assigned(aNode) then  Exit;

  //do your code
end;

原文地址:https://www.cnblogs.com/moon25/p/1629635.html