|
|
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Это разные переменные Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2019, 15:57 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
DimaBrЭто разные переменные Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Это я коряво вставил на форум просто, хотел убрать все подчеркивания, чтоб получше читалось (я вообще переменные которые потенциально могут совпасть с каким-нибудь оператором начинаю с "_"), но где-то забыл убрать :). Они одинаковые там :). (но на всякий случай проверил) Вроде поправил. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2019, 16:13 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, У TTreeNode есть ещё Parent - ссылка на родительскую ноду. Т.е. зная выделенную ноду (TreeView.Selected), можно получить Parent. В Data у ноды можно хранить ссылку на элемент в списке, какие настройки нужно отображать при выделении этого узла. Т.е. задача стоит не в том, как определить, какой узел выделен, а в одновременном формировании дерева и списка с настройками и привязки узлов дерева к списку с настройками. Вы читаете файл настроек, создаёте список этих файлов и строите узел дерева в Data указав ссылку на идентификатор файла в списке. Ваши сообщения очень сумбурные и малопонятные. Древовидная структура берётся из структуры каталогов или из файла? Можно ли отобразить настройки, скажем, для "Общие параметры ТВС 0-6" (узел второго уровня из стартового сообщения), или можно отобразить настройки только для конечных узлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2019, 16:25 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Подумайте, что будет, вложенность будет больше, чем 4 уровня? Будете переписывать код, добавляя lvl5, lvl6 ... lvl10? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2019, 16:29 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
goldmi45Андрей Игоревич, У TTreeNode есть ещё Parent - ссылка на родительскую ноду. Т.е. зная выделенную ноду (TreeView.Selected), можно получить Parent. Использую повсеместно. goldmi45Андрей Игоревич, В Data у ноды можно хранить ссылку на элемент в списке, какие настройки нужно отображать при выделении этого узла. Т.е. задача стоит не в том, как определить, какой узел выделен, а в одновременном формировании дерева и списка с настройками и привязки узлов дерева к списку с настройками. Вы читаете файл настроек, создаёте список этих файлов и строите узел дерева в Data указав ссылку на идентификатор файла в списке. Как я понял просто одномерный массив индексов, ну тоже вариант, надо обдумать. Изначально тоже о нем подумал, но решил, что массив с уровнями куда "читабельней" (уж больно я потом в своём коде начинаю путаться, потому стараюсь писать так, чтоб сразу понять что тут и к чему). goldmi45Андрей Игоревич, Ваши сообщения очень сумбурные и малопонятные. Древовидная структура берётся из структуры каталогов или из файла? Можно ли отобразить настройки, скажем, для "Общие параметры ТВС 0-6" (узел второго уровня из стартового сообщения), или можно отобразить настройки только для конечных узлов? В том то и сложность задачи для меня, древовидная структура одновременно берется и из самих файлов (есть группы файлов одного плана) и из их содержимого, есть файлы где по 200+ настроек, разбитые на разделы. Есть вообще всякая геометрия, поля и прочее подобное, где изначально будет общая геометрия, а по мере раскрытия узлов всякие дополнительные параметры, на сколько уровней пока не продумывал. Отобразить можно как угодно и что угодно - главное что бы это было удобно и интуитивно понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2019, 16:44 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
goldmi45Андрей Игоревич Подумайте, что будет, вложенность будет больше, чем 4 уровня? Будете переписывать код, добавляя lvl5, lvl6 ... lvl10? Так вродеж тем и хороши записи, что добавив уровни не надо ничего переписывать. В общем надо подумать. Сейчас у меня просто поиск по имени узла и имени родителя происходит, который сверяю с сохраненными данными и вывожу форму. Всё прекрасно работает, но мне не нравится, вообще нечитабильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2019, 16:48 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Вылетает с ошибкой на ошибку чтения из памяти, при том вылетает при завершении процедуры в которую вложен Думаю что это происходит из-за Код: pascal 1. Попробуйте хранить так Код: pascal 1. Я так и не понимаю, что вы храните в Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2019, 22:03 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревичgoldmi45пропущено... Подумайте, что будет, вложенность будет больше, чем 4 уровня? Будете переписывать код, добавляя lvl5, lvl6 ... lvl10? Так вродеж тем и хороши записи, что добавив уровни не надо ничего переписывать. В общем надо подумать. Ошибаетесь. Необходимо будет в записи добавить ещё одну переменную, необходимо дописать поиск, вывод. Перекомпилить наконец. А это не всегда возможно (потеря исходников, например, может случиться). Андрей ИгоревичСейчас у меня просто поиск по имени узла и имени родителя происходит, который сверяю с сохраненными данными и вывожу форму. Всё прекрасно работает, но мне не нравится, вообще нечитабильно. При таком подходе - грабли слегка прикрыты сеном. Может ли случиться такая ситуация, когда будет два разных узла, у которых наименование их и их родителей совпадут? Если это не случится сегодня, может ли такой сценарий реализоваться в будущем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 08:07 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
авторКак всё-таки корректно работать с Data? Просто преобразовывать тип. Например. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Я не очень понимаю, чем вас не устраивает простой перебор нодов? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Если у вас даже тыща-другая узлов, это все равно будет работать быстрее, чем вы сможете почувствовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 12:07 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
авторесть файлы где по 200+ настроек, разбитые на разделы. А вы загрузить это сможете? Задача как бы не совсем примитивная, я как-то делал аналог проги DelphiWorld с загрузкой и сохранением в бинарник своего формата, но там я как захотел, так и сделал, у меня просто с узлом хранилось число дочерных и все делалось через стек родительских узлов (деревья вообще любят стековые алгоритмы). А как у вас в файле всё это организовано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 12:13 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
goldmi45Андрей Игоревичпропущено... Так вродеж тем и хороши записи, что добавив уровни не надо ничего переписывать. В общем надо подумать. Ошибаетесь. Необходимо будет в записи добавить ещё одну переменную, необходимо дописать поиск, вывод. Перекомпилить наконец. А это не всегда возможно (потеря исходников, например, может случиться). Не, ну как бы любые корректировки подобного масштаба к чему-то подобному приведут, доживем - подумаем :) Андрей Игоревичпропущено... Андрей ИгоревичСейчас у меня просто поиск по имени узла и имени родителя происходит, который сверяю с сохраненными данными и вывожу форму. Всё прекрасно работает, но мне не нравится, вообще нечитабильно. При таком подходе - грабли слегка прикрыты сеном. Может ли случиться такая ситуация, когда будет два разных узла, у которых наименование их и их родителей совпадут? Если это не случится сегодня, может ли такой сценарий реализоваться в будущем? Могут, тоже одна из причин почему не очень нравится. DimaBrВылетает с ошибкой на ошибку чтения из памяти, при том вылетает при завершении процедуры в которую вложен Думаю что это происходит из-за Код: pascal 1. Логично :), после добавления этого кода и начало вылетать. DimaBr Попробуйте хранить так Код: pascal 1. Ну это ничем не будет отличатся от обычного индекса узла, что вызывает некоторые сложности к обращению к данным. DimaBrЯ так и не понимаю, что вы храните в Код: pascal 1. 2. 3. 4. 5. 6. Индексы для узла. Суть в том, что я структурировал данные в виде записи так же, как они выглядят в дереве TreeNode, поэтому обращаться к конкретной ячейке памяти по таким индексам можно напрямую, без поисков и прочего. BeltarавторКак всё-таки корректно работать с Data? Просто преобразовывать тип. Например. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Ну это не особо отличается от "своего узла" с индексами предложенного выше :). BeltarЯ не очень понимаю, чем вас не устраивает простой перебор нодов? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Если у вас даже тыща-другая узлов, это все равно будет работать быстрее, чем вы сможете почувствовать. Ну пока так и работает, и даже быстро, просто из-за кучи мелких нюансов (разного формата данных из файлов) в коде возникает огромное количество условий, циклов проверок на всё подряд, при возникновении ошибки в которых у меня начинает кипеть мозг. Как я уже писал выше, сами данные в программе я структурирую так же, как они будут отображены в дереве, потому обращение по индексам/уровням позволит сразу обращаться к нужной ячейке данных минуя переборы и проверки. Вот поэтому я вел разговор про индексацию с учетом уровней. Beltarавторесть файлы где по 200+ настроек, разбитые на разделы. А вы загрузить это сможете? Задача как бы не совсем примитивная, я как-то делал аналог проги DelphiWorld с загрузкой и сохранением в бинарник своего формата, но там я как захотел, так и сделал, у меня просто с узлом хранилось число дочерных и все делалось через стек родительских узлов (деревья вообще любят стековые алгоритмы). А как у вас в файле всё это организовано. Смогем, и не такое грузили (не без помощи товарищей с этого форума), даже пол сотни гигабайт грузил :). В данном случае объемы данных исчисляются от силы парой гигабайт, даже на 64 бита не придется переходить :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 17:16 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Индексы для узла. Суть в том, что я структурировал данные в виде записи так же, как они выглядят в дереве TreeNode, поэтому обращаться к конкретной ячейке памяти по таким индексам можно напрямую, без поисков и прочего. Кто мешает написать функцию обращения к узлам дерева по индексам ? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 22:59 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
DimaBrИндексы для узла. Суть в том, что я структурировал данные в виде записи так же, как они выглядят в дереве TreeNode, поэтому обращаться к конкретной ячейке памяти по таким индексам можно напрямую, без поисков и прочего. Кто мешает написать функцию обращения к узлам дерева по индексам ? Код: pascal 1. Ничего не мешает, записать индексы в строку и потом брать их оттуда я подумал сразу, о чем и написал, когда спрашивал :). Просто я подумал, что есть более аккуратное решение. Только строку сохранять в Data (это работает без проблем), а не в название. Наверно так и поступлю. Но из вашего кода узнал для себя кучу новых способов работы с TreeViev, спасибо :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 21:14 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич> Ничего не мешает, записать индексы в строку и потом брать их оттуда я подумал... В раздрызге спьяну? В "название" (name) именно и надо писать название (в терминах предметной области, команды , маску чёрта лысого...) Строка слишком короткая, чтобы в неё индексы писать, и неудобно смотреть на такое. А остальные атрибуты - в любую свою структуру. Вот адрес этой структуры и надо писать в Data (данные пользователя), маску флажков, адрес адреса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2019, 01:21 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
GatorАндрей Игоревич> Ничего не мешает, записать индексы в строку и потом брать их оттуда я подумал... В раздрызге спьяну? В "название" (name) именно и надо писать название (в терминах предметной области, команды , маску чёрта лысого...) Строка слишком короткая, чтобы в неё индексы писать, и неудобно смотреть на такое. А остальные атрибуты - в любую свою структуру. Вот адрес этой структуры и надо писать в Data (данные пользователя), маску флажков, адрес адреса. Ничего не понял, но ок :). Яж вроде писал, что индексы сохранять в строку, а строку уже в Data. Имя пусть именем и остается. Как делать ссылки(адреса стуктуры) через Data понятия не имею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2019, 02:01 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичЯж вроде писал, что индексы сохранять в строку, а строку уже в Data. Зачем в Data хранить индексы ? Что вы этим с этим индексом хотите делать ? Положение узла в дереве и так определяется без всяких Data. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2019, 02:22 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичКак делать ссылки(адреса стуктуры) через Data понятия не имею. в x32 системах Data = 4-м байтам и структура сидит по адресу в 4 байта. Код: pascal 1. 2. 3. на что похоже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2019, 03:15 |
|
||
|
Treeview и удобный способ определения узлов?
|
|||
|---|---|---|---|
|
#18+
DimaBrАндрей ИгоревичЯж вроде писал, что индексы сохранять в строку, а строку уже в Data. Зачем в Data хранить индексы ? Что вы этим с этим индексом хотите делать ? Положение узла в дереве и так определяется без всяких Data. Индекс индексу рознь и люпус ест :) Как быть с сиквельными xml или составными индексами, IP/MAC адресами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2019, 03:28 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39818988&tid=2039435]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 417ms |

| 0 / 0 |
