Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Методы Assign и AssignTo написаны для типов TStrings и TListItems

Delphi , Компоненты и Классы , Списки

Методы 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;

Приведенный код является частью класса TNamedHCollection, который, судя по названию, является коллекцией элементов с именами и возможной иерархической структурой (например, деревом). Он имеет два метода: AssignTo и Assign.

Метод AssignTo предназначен для присваивания значений существующего объекта (Self) другому объекту (Dest). В этом случае он проверяет, является ли Dest объектом TTreeNodes или TTreeNode, и в зависимости от этого присваивает значения из Self в Dest.

Метод Assign также предназначен для присваивания значений существующего объекта (Source) Self. Опять же, он проверяет, является ли Source объектом TTreeNodes или TTreeNode, и в зависимости от этого присваивает значения из Source в Self.

Вот подробное описание того, что эти методы делают:

  • Если DestAssignTo) является объектом TTreeNodes, он добавляет все элементы из Self как дочерние для Dest. Каждый элемент получает свой собственный поддерево.

  • Если DestAssignTo) является объектом TTreeNode, он добавляет все элементы из Self как братья Dest. Каждый элемент получает свой собственный поддерево.

  • Если SourceAssign) является объектом TTreeNodes, он присваивает первый узел из Source Self.

  • Если SourceAssign) является объектом TTreeNode, он итерирует все потомки Source и создает элемент в Self для каждого из них. Имя элемента устанавливается в текстовое свойство descendants, а его элементы присваиваются из поддерева, корневым узлом которого является тот descendant.

Методы также вызывают метод, наследуемый от класса, если тип Dest или Source не соответствует ни одному из этих конкретных случаев.

Цель этих методов seems to be facilitate the transfer of hierarchical data structures (e.g., trees) between different objects.

Методы Assign и AssignTo в классе TNamedHCollection реализованы для типов TStrings и TListItems с учетом особенностей работы с деревьями.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 17:40:02/0.0037579536437988/0