Мне кажется, что вы ищете все выбранные узлы, у которых есть родительский узел. Самый простой способ сделать это следующим образом:
procedure EnumerateSelectedNonTopLevelItems(TreeView: TTreeView; List: TStrings);
var
Node: TTreeNode;
begin
for Node in TreeView.Items do
if Node.Selected and Assigned(Node.Parent) then
List.Add(Node.Text);
end;
Эта процедура даст вам узлы на уровнях 2, 3, 4 и т. Д. Поскольку у вас есть только уровень 0 и уровень 1, это нормально. Если вам действительно нужны узлы, которые являются прямыми потомками узлов верхнего уровня, вы можете изменить тест следующим образом:
if Node.Selected and Assigned(Node.Parent) and not Assigned(Node.Parent.Parent) then