The IsVisible property returns only if the nodes were hidden or not, as you found. The only way to find if the node is on the screen is to use GetDisplayRect as suggested, and then check it for the client tree view rectangle.
However, if I understand what you're trying to do correctly, the toCenterScrollIntoView parameter in SelectionOption VirtualTreeView will give you the behavior you need without checking if the node is in the visible area or not.
t (C ++):
TreeView->TreeOptions->SelectionOptions = TreeView->TreeOptions->SelectionOptions << toCenterScrollIntoView ; ... ScrollIntoView(Node);
source share