![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как поменять местами узлы,
MikeFW © (2002-08-07 11:13:00)Уважаемые Мастера, подскажите, пожалуйста,
Как поменять местами узлы, "дети" одного узла в TreeView?
например, есть дерево
1
|--- 2
|--- 3
|--- 4
а мне надо мышкой перенести 3 перед 2
чтобы получилось так:
1
|--- 3
|--- 2
|--- 4
MikeFW (2002-08-08 11:04:00) [1]Только в приведенном примере не удается поменять местами "детей" одного "родителя", а мне именно это и нужно сделать.
т.е. в выше приведенном примере с деревом, я хочу перетащить "3" на "1" и получить последовательность "3","2","4" в "1".
а именно как мне менять у "детей" "родителя" TTreeNode.Index,
т.е. вначале у "2" этот показатель равен 0, а у "3" - 1, а я хочу чтобы у "3" он стал - 1, а у "2" - 0.
Подскажите, пожалуйста, как это сделать?
Ник (2002-08-07 12:01:00) [2]Поразбирайся
У TreeView dragmode = dmAutomatic
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject;
X, Y: Integer);
var
TargetNode, SourceNode: TTreeNode;
begin
TargetNode := TreeView1.GetNodeAt (X, Y);
if TargetNode <> nil then
begin
SourceNode := TreeView1.Selected;
SourceNode.MoveTo (TargetNode, naAddChildFirst);
TargetNode.Expand (False);
TreeView1.Selected := TargetNode;
end;
end;
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
TargetNode, SourceNode: TTreeNode;
begin
TargetNode := TreeView1.GetNodeAt (X, Y);
// accept dragging from itself
if (Source = Sender) and (TargetNode <> nil) then
begin
Accept := True;
// determines source and target
SourceNode := TreeView1.Selected;
// look up the target parent chain
while (TargetNode.Parent <> nil) and
(TargetNode <> SourceNode) do
TargetNode := TargetNode.Parent;
// if source is found
if TargetNode = SourceNode then
// do not allow dragging over a child
Accept := False;
end
else
Accept := False;
end;