Re: Reordering TreeNodes




How can I swap (reorder) nodes in an unsorted TreeView.
TTreeNode.Moveto. There is a help file, you know.
Yes; I already managed; I wrote a procedure using MoveTo.
But I expected just one simple call.

From now on, it is.


[...]
SwapNodes(TreeView.Selected);

It does look odd to swap a single node.

Yes; what I wanted is to give the user the possibility to "build" a tree. And "SwapNodes(TreeView.Selected);" is to swap the TreeView.Selected with the next or previous one on the same level in the tree. New:

procedure SwapTreeNodes(Node1 : TTreeNode; Down : boolean = True);
var
Node2 : TTreeNode;
Node1Expanded, Node2Expanded : boolean;
begin
if Node1 = nil then Exit;

if Down then
Node2 := Node1.GetNextSibling
else
Node2 := Node1.GetPrevSibling;

if Node2 = nil then Exit;
Node1Expanded := Node1.Expanded;
Node2Expanded := Node2.Expanded;

if Down then
Node2.MoveTo(Node1, naInsert)
else
Node1.MoveTo(Node2, naInsert);

if Node1Expanded then Node1.Expand(True);
if Node2Expanded then Node2.Expand(True);

Node1.TreeView.Selected := Node1;

ToggleStates(TTreeView(Node1.TreeView));
end;

And don't forget the problem with the StateIndex:

procedure ToggleState(TreeNode : TTreeNode);
var StateIndex : integer;
begin
if not Assigned(TreeNode) then Exit;

StateIndex := TreeNode.StateIndex;
TreeNode.StateIndex := -1;
TreeNode.StateIndex := StateIndex;
end;

procedure ToggleStates(TreeView : TTreeView);
var T : integer;
begin
for T := 0 to TreeView.Items.Count - 1 do
ToggleState(TreeView.Items[T]);
end;

And ... I'd be rich, getting paid for reading the helpfile.

Good! It's what programmers do. (That, and writing code.)

Groetjes,
Maarten Wiltink

Fons.
.