Как вариант - частичное решение (как сделать expand только для "полного" пути). Но как скрыть все ненужные узлы "выше" и "ниже" - с ходу не знаю.
Код:
procedure TForm1.SpeedButton3Click(Sender: TObject);
Var
Node : TTreeNode;
i,a_ind : integer;
begin
ListBox1.Items.Clear;
if Assigned(TreeView1.Selected) then begin
//----------------------------------------
//"формируем" путь
Node:=TreeView1.Selected;
ListBox1.Items.Insert(0,IntToStr(Node.AbsoluteIndex)+'='+Node.Text);
Node.Collapse(true);
while Assigned(Node.Parent) do
begin
Node:=Node.Parent;
ListBox1.Items.Insert(0,IntToStr(Node.AbsoluteIndex)+'='+Node.Text);
end;
//----------------------------------------
//----------------------------------------
//"обрабатываем" путь
TreeView1.Items[0].Collapse(true);
i:=-1;
while i<(ListBox1.Items.Count-1) do
begin
i:=i+1;
a_ind:=StrToInt(ListBox1.Items.NAMES[i]);
TreeView1.Selected:=TreeView1.Items[a_ind];
TreeView1.Selected.Expand(false);
end;
//----------------------------------------
end
else begin
ShowMessage('Не выбран узел');
end;
end;