Delphi World - Методы Assign и AssignTo написаны для типов TStrings и TListItems
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Методы 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;
Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования