Методы Assign и AssignTo написаны для типов TStrings и TListItems
Оформил: DeeCo
Автор: Максим Игнатьев
Вариант решения :
Публикуется только в части предмета задания. Полный вариант проекта -
Lists2.zip (6.7K)
procedure TNamedHCollection.AssignTo(Dest: TPersistent);
var
i, c: integer;
TN: TTreeNode;
begin
...
// Заветное решение для дерева.
if Dest is TTreeNodes then
with TTreeNodes(Dest) do
begin
BeginUpdate;
Clear;
for i := 0 to Self.Count - 1 do
begin
TN := AddChild(nil, Items[i].Name);
TN.Assign(Items[i].Items);
end;
EndUpdate;
exit;
end;
if Dest is TTreeNode then
with TTreeNode(Dest) do
begin
for i := 0 to Self.Count - 1 do
begin
TN := Owner.AddChild(TTreeNode(Dest), Items[i].Name);
TN.Assign(Items[i].Items);
end;
exit;
end;
inherited;
end;
procedure TNamedHCollection.Assign(Source: TPersistent);
var
i: integer;
FItem: TNamedHCollectionItem;
TN, NN: TTreeNode;
begin
.....
// Заветное решение для дерева.
if Source is TTreeNodes then
begin
Assign(TTreeNodes(Source).GetFirstNode);
exit;
end;
if Source is TTreeNode then
begin
TN := TTreeNode(Source);
while TN <> nil do
begin
FItem := Self.Add;
FItem.Name := TN.Text;
NN := TN.GetFirstChild;
if Assigned(NN) then
FItem.Items.Assign(NN);
TN := TN.getNextSibling;
end;
exit;
end;
inherited;
end;
|