linker_2009 Цитата: отпишитесь пожалуйста по результату
Вот как мы реализовали: Примерный порядок действий для подсветки выделенной ветки TTreeView, TcxTreeList, TdxTreeList и др.
Надо запоминать где-то предыдущий выделенный нод, например, в свойстве Tag.
Перед загрузкой корня дерева обнулить
TreeView1.Tag:=0;
Заполнить дерево
TreeView1.Items.Clear;
ChildNode:=TreeView1.Items.AddChild(ParentNode, s);
ChildNode.ImageIndex:=0;
ChildNode.SelectedIndex:=1;
TImageList укомплектован иконками активными и неактивными через одну:
0 - Неактивная иконка объекта1
1 - Активная иконка объекта1
0 - Неактивная иконка объекта2
1 - Активная иконка объекта2
...
Событие Click (кому надо можно и в Change).
Код: procedure TForm1.TreeView1Click(Sender: TObject);
// установить иконку во всей ветке от ANode до корня
procedure SetImageNode(ANode: TTreeNode);
begin
while (ANode<>nil) do
begin
try
ANode.ImageIndex:=ANode.SelectedIndex;
ANode:=ANode.Parent;
except
Exit;
end;
end;
end;
// вернуть обычную иконку
procedure RestoreImageNode(ANode: TTreeNode);
begin
while (ANode<>nil) do
begin
try
ANode.ImageIndex:=ANode.SelectedIndex-1;
ANode:=ANode.Parent;
except
Exit;
end;
end;
end;
var
Node: TTreeNode;
begin
Node:=TreeView1.Selected;
if (Node=nil) then
Exit;
RestoreImageNode(pointer(TreeView1.Tag)); // вернуть неактивную иконку
SetImageNode(Node); // установить активную иконку
Treeview.Tag:=Integer(Node); // запоминаем выделенный нод, чтобы потом вернуть его иконку к прежнему виду
end;