Показать сообщение отдельно
  #2  
Старый 25.08.2009, 10:35
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Как вариант - частичное решение (как сделать 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;
Ответить с цитированием