伝説の Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 Собственно как это можно сделать? P.S. Сохранить то получается (с нужными данными), а вот как воссоздать дерево из файла уже всю голову сломал... Как сохраняю: Использую json (superobject), в цикле пробегаюсь по всем item'ам сохраняя их text и level. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 10 ноября, 2015 Модераторы Поделиться Опубликовано 10 ноября, 2015 покажи файл который получился Цитата Ссылка на комментарий
0 伝説の Опубликовано 10 ноября, 2015 Автор Поделиться Опубликовано 10 ноября, 2015 покажи файл который получился { "UPDATED": "", "DATA": { "1": { "level": 1, "text": "ITEM1" }, "2": { "level": 2, "text": "ITEM1_SUB1" }, "3": { "level": 1, "text": "ITEM2" }, "4": { "level": 2, "text": "ITEM2_SUB1" }, "5": { "level": 2, "text": "ITEM2_SUB2" }, "6": { "level": 2, "text": "ITEM2_SUB3" }, "7": { "level": 2, "text": "ITEM2_SUB4" }, "8": { "level": 1, "text": "ITEM3" } } } Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 10 ноября, 2015 Модераторы Поделиться Опубликовано 10 ноября, 2015 кажется такой подход будет удобней DATA - массив { "UPDATED":"", "DATA":[ { "ItemIndex":1, "text":"ITEM1", "parent":0 }, { "ItemIndex":2, "text":"ITEM1_SUB1", "parent":1 } ] } Цитата Ссылка на комментарий
0 伝説の Опубликовано 10 ноября, 2015 Автор Поделиться Опубликовано 10 ноября, 2015 (изменено) кажется такой подход будет удобней DATA - массив { "UPDATED":"", "DATA":[ { "ItemIndex":1, "text":"ITEM1", "parent":0 }, { "ItemIndex":2, "text":"ITEM1_SUB1", "parent":1 } ] } Ну ок, а как из этого всего теперь дерево воссоздать в runtim'е? Изменено 10 ноября, 2015 пользователем My War Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 10 ноября, 2015 Модераторы Поделиться Опубликовано 10 ноября, 2015 вот так примерно json-treeview.zip Ingalime 1 Цитата Ссылка на комментарий
0 伝説の Опубликовано 10 ноября, 2015 Автор Поделиться Опубликовано 10 ноября, 2015 вот так примерноjson-treeview.zip Мне кажется или в вашем коде что-то не так?... Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 10 ноября, 2015 Модераторы Поделиться Опубликовано 10 ноября, 2015 я показал пример, дальше по такой же схеме. учтите что левелы нужно самому проверять. чем больше вложенностей, тем больше будет левелов Цитата Ссылка на комментарий
0 伝説の Опубликовано 10 ноября, 2015 Автор Поделиться Опубликовано 10 ноября, 2015 я показал пример, дальше по такой же схеме.учтите что левелы нужно самому проверять.чем больше вложенностей, тем больше будет левеловНу так я и пытаюсь универсальный способ написать... Цитата Ссылка на комментарий
0 伝説の Опубликовано 11 ноября, 2015 Автор Поделиться Опубликовано 11 ноября, 2015 Получилось написать, работает на всех уровнях. Экспортprocedure ExportFromTreeView(Path: String; TreeView: TTreeView); var Generated: ISuperObject; Counter: Integer; I: TTreeViewItem; begin if not Assigned(TreeView) then Exit; { } TreeView.ExpandAll; Generated := SO('{"Data": []}'); { } for Counter := 0 to TreeView.GlobalCount - 1 do begin I := TreeView.ItemByGlobalIndex(Counter); Generated.A['Data'].Add(SO(['text', I.Text, 'level', I.Level])); end; { } Generated.SaveTo(path, True); end; Импортprocedure ImportToTreeView(Path: String; TreeView: TTreeView); var I, Last: TTreeViewItem; ImportData, S: ISuperObject; begin if not Assigned(TreeView) then Exit; ImportData := TSuperObject.ParseFile(Path, False); if not Assigned(ImportData) then Exit; { } TreeView.Clear; { } for S in ImportData['Data'] do begin I := TTreeViewItem.Create(nil); I.Text := S.S['text']; case S.I['level'] of 1: TreeView.AddObject(I); else begin if S.I['level'] > Last.Level then Last.AddObject(I) else if S.I['level'] = Last.Level then Last.ParentItem.AddObject(I) else Last.ParentItem.ParentItem.AddObject(I); end; end; Last := I; end; { } TreeView.ExpandAll; end;P.S.Сорри за мой кодстайл, но думаю суть поймете. Ingalime и Ksusha 1 1 Цитата Ссылка на комментарий
0 Demon-x Опубликовано 6 апреля, 2021 Поделиться Опубликовано 6 апреля, 2021 Не работает(( Цитата Ссылка на комментарий
0 Ksusha Опубликовано 25 марта, 2023 Поделиться Опубликовано 25 марта, 2023 (изменено) В 11.11.2015 в 10:02, 伝説の сказал: Получилось написать, работает на всех уровнях. Экспорт Скрытый контент Импорт Скрытый контент P.S.Сорри за мой кодстайл, но думаю суть поймете. Спасибо тебе большое! UPD. Только была проблема с импортом - некоторые папки попадали в не свой ЛВЛ. Если дочерние элементы находятся на одном уровне с предыдущим элементом, то их нужно добавлять в одну и ту же папку, но в данном коде это не учитывается. Фиксанула: if S.I['level'] = 1 then begin TreeView.AddObject(I); Last := I; end else begin while S.I['level'] <= Last.Level do begin Last := Last.ParentItem; end; Last.AddObject(I); Last := I; end; Код добавляет новый элемент в папку на уровне выше, если уровень нового элемента меньше или равен уровню предыдущего элемента, иначе добавляет его в предыдущую папку. Кроме того, в начале обработки первого элемента устанавливается Last в корневой элемент TreeView. Может потомкам пригодится. Хотя, делфи уже мертв(( Изменено 25 марта, 2023 пользователем Ksusha Цитата Ссылка на комментарий
0 伝説の Опубликовано 26 марта, 2023 Автор Поделиться Опубликовано 26 марта, 2023 15 часов назад, Ksusha сказал: Спасибо тебе большое! UPD. Только была проблема с импортом - некоторые папки попадали в не свой ЛВЛ. Если дочерние элементы находятся на одном уровне с предыдущим элементом, то их нужно добавлять в одну и ту же папку, но в данном коде это не учитывается. Фиксанула: if S.I['level'] = 1 then begin TreeView.AddObject(I); Last := I; end else begin while S.I['level'] <= Last.Level do begin Last := Last.ParentItem; end; Last.AddObject(I); Last := I; end; Код добавляет новый элемент в папку на уровне выше, если уровень нового элемента меньше или равен уровню предыдущего элемента, иначе добавляет его в предыдущую папку. Кроме того, в начале обработки первого элемента устанавливается Last в корневой элемент TreeView. Может потомкам пригодится. Хотя, делфи уже мертв(( Спасибо, на тот момент видимо под мою задачу я это не учитывал... Цитата Ссылка на комментарий
Вопрос
伝説の
Собственно как это можно сделать?
P.S.
Сохранить то получается (с нужными данными), а вот как воссоздать дерево из файла уже всю голову сломал...
Как сохраняю:
Использую json (superobject), в цикле пробегаюсь по всем item'ам сохраняя их text и level.
Ссылка на комментарий
12 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.