复制和移动TreeView节点

字体大小: 中小 标准 ->行高大小: 标准
procedure AddSubTree(DestTree: TTreeView; SourceNode, DestNode: TTreeNode; AddState: Boolean);

var

TempNode, TempNode1: TTreeNode;

I : integer;

begin

TempNode := DestNode;

with DestTree do begin

if Not (AddState) then TempNode := Items.AddChild(DestNode, sourceNode.Text);

if SourceNode.HasChildren then begin

for I := 0 to SourceNode.Count-1 do begin

if I>0 then

TempNode := Items.AddChild(TempNode.Parent, SourceNode.Item[I].Text)

else

TempNode := Items.AddChild(TempNode, SourceNode.Item[I].Text);

AddSubTree(DestTree, SourceNode.Item[I], TempNode, True);

end;

end;

end;

end;

procedure MoveSubTreeView(SourceTreeView, DestTreeView: TTreeView; Keep: Boolean);

var

TempLevel, TempIndex : integer;

I, J : integer;

TempNode : array of TTreeNode;

TempNode1 : TTreeNode;

Yes_No : Boolean;

OldOnChanging, OldOnChanging1 : TTVChangingEvent;

OldOnChange, OldOnChange1 : TTVChangedEvent;

IsSelected : TTreeNode;

begin

OldOnChanging := DestTreeView.OnChanging;

DestTreeView.OnChanging := Nil;

OldOnChange := DestTreeView.OnChange;

DestTreeView.OnChange := Nil;

OldOnChanging1 := SourceTreeView.OnChanging;

SourceTreeView.OnChanging := Nil;

OldOnChange1 := SourceTreeView.OnChange;

SourceTreeView.OnChange := Nil;

IsSelected := SourceTreeView.Selected;

TempLevel := SourceTreeView.Selected.Level;

setlength(TempNode, TempLevel+1);

Yes_No := False;

TempNode1 := Nil;

TempIndex := FindNode(DestTreeView, SourceTreeView.Selected.Text);

if TempIndex>-1 then begin

DestTreeView.Items[TempIndex].Delete;

end;

with SourceTreeView do begin

TempNode[TempLevel] := Selected;

if TempLevel>0 then

for I := TempLevel-1 downto 0 do begin

TempNode[I] := TempNode[I+1].Parent;

end;

end;

with DestTreeView.Items do begin

if Count>0 then begin

for I := TempLevel downto 0 do

for J := Count-1 downto 0 do begin

if (TempNode[I].Text=DestTreeView.Items[J].Text) and (TempNode1=Nil) then begin

if I=Templevel then Yes_no := True;

TempNode1 := DestTreeView.Items[J];

end;

end;

end;

if TempNode1=Nil then

for I := 0 to TempLevel-1 do begin

TempNode1 := AddChild(TempNode1, TempNode[I].Text);

end

else

for I := TempNode1.Level+1 to TempLevel-1 do begin

TempNode1 := AddChild(TempNode1, TempNode[I].Text);

end;

end;

 

AddSubTree(DestTreeView, IsSelected, TempNode1, False);//Yes_No);

if (Not (Keep)) then begin

if (IsSelected.Parent<>Nil) and (IsSelected.Parent.Count<1) then

IsSelected.Parent.Delete

else

IsSelected.Delete;

end;

DestTreeView.SortType := stData;

DestTreeView.OnChanging := OldOnChanging;

DestTreeView.OnChange := OldOnChange;

SourceTreeView.OnChanging := OldOnChanging1;

SourceTreeView.OnChange := OldOnChange1;

end;

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68118.html