Показать сообщение отдельно
  #2  
Старый 12.09.2022, 21:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да нет такого языка. Это что-то специфическое.
В принцпе, не самая сложная структура. Узел дерева либо содержит строку, либо список (я имею в виду 3й параметр).
Да, для отображения лучше использовать что-то вроде TTreeView. Вообще, видел компоненты, реализующие что-то типа TTreeList, т.е. дерево с колонками в итемах. Вроде, TVirtualTreeView позволяет твкое делать, но сам с ним не работал (не нужно было пока).

Сохранять можно просто обходом дерева.
Код:
// Класс с данными, привязанный к TTreeNode.Data
type
  TCommandNode = class
    Number : String;
    Name : String;
    Command : String;
  end;
...
function toString(Node : TTreeNode) : String;
var
  d : TCommandNode;
  i : Integer;
begin
  d := TCommandNode(Node.Data);
  result := Format('"%s" "%s"',[d.Number,d.Name]);
  If (Node.Items.Count = 0 Then
    result := result + Format(' "%s"'#13#10,[d.Command])
  Else
    Begin
      result := result + #13#10 + '{' + #13#10;
      For I := 0 To Node.Items.Count Do
        result := result + toString(Node.Items[i]);
      result := result + '}' + #13#10;
    End;
end;

Как-то так. Не проверял и писал по памяти, но суть должна быть понятна. Параметр вызова - корневой узел дерева. Если из несколько, то надо в цикле перебрать их все и результат объединипть.
Ответить с цитированием