First do with the node passed to SelectChildren what you have want to - here mark is as selected. Then you want to continue with its children. The first child is ANode.GetFirstChild, the next child is its next sibling, etc. For each child, call for it SelectChildren. Since this is a recursive call it will automatically propagate the selection to the children of the children etc.
procedure TForm1.SelectChildren(ANode: TTreeNode);
begin
if ANode = nil then
exit;
ANode.Selected := true;
ANode := ANode.GetFirstChild;
while ANode <> nil do begin
SelectChildren(ANode);
ANode := ANode.GetNextSibling;
end;
end;
procedure TForm1.TreeView1SelectionChanged(Sender: TObject);
begin
TreeView1.BeginUpdate;
SelectChildren(Treeview1.Selected);
TreeView1.EndUpdate;
end;