| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > TreeView |
| Автор: Alix 8.11.2005, 09:48 | ||
| Обыскал рунет, но так и не нашел описание того, как можно сделать перемещения элементов в TreeView вверх/вниз на позицию, влево/вправо (т.е. выше на каталог и поместить в нижний каталог). Сам я это все сделал. Точнее пока только вверх/вниз. И оно работает. Но если один элемент переместить вверх/вниз опр. (притом фиксированное!) число раз, то вылетает Access Violation. А так ничего... работает... Но проблема в том, что я не могу найти откуда у этого violation'a "ноги растут"... Думал что это конфликт с обработчиками событий TreeView'a, но закоментировал их код, а ошибка все равно осталась. Пожалуйста, напишите, как бы вы сделали перемещение элемента вверх/вниз (хотя бы это). Заодно в DRKB поместить можно будет Перемещать можно по-разному. Как способ предлагаю написать ф-ю Exchange(node1, node2 : TTreeNode), которая меняла бы соседние эл-ты местами. Соответственно функции:
|
| Автор: _hunter 8.11.2005, 12:28 |
| код Exchange() привести не помешало бы... |
| Автор: Alix 8.11.2005, 15:50 | ||||
Читайте внимательнее! |
| Автор: _hunter 8.11.2005, 16:04 | ||||
из чего я делаю вывод что код есть. его я и просил. или под
следует понимать приглашение для всех желающих написать эту функцию? |
| Автор: Alix 9.11.2005, 09:10 |
| Поясняю. Да, код есть. Но есть и непонятные глюки. Поэтому я прошу тех, кто может, написать всего одну очень простую функцию Exchange. Свой код я не привожу по той причине, что, быть может, у данной задачи есть несколько путей решения и я не хочу, чтобы другие, посмотрев на мой код, начали искать решение в том же направлении, где его искал я. Тогда, может быть, появятся решения другого типа нежели у меня и, может быть, с ним не будет никаких глюков. Хотя если вы будете настаивать, свой код я выложить могу. Благо это задача copy/paste... |
| Автор: _hunter 9.11.2005, 12:01 |
| код выкладывай ( заодно о своих ошибках узнаеш ) а решение зависит от того, нужно ли детей ноды переносить. |
| Автор: Alix 9.11.2005, 13:42 | ||||||
Разумеется! Ладно. Уломал. Вот код:
Да! Забыл здесь написать (а так это есть). В функциях MoveUp/Down оисанных выше вызов Exchange обрамлен следующим кодом:
|
| Автор: Alexeis 10.11.2005, 10:16 | ||
Вот такой код позволяет перетаскивать элементы Treeview
|
| Автор: Albinos_x 10.11.2005, 11:36 |
| alexeis1 я думаю ему нужно не передаскивание, а именно перемещение |
| Автор: Quadr0 10.11.2005, 13:56 |
| ... |
| Автор: Alexeis 10.11.2005, 14:32 |
| Quadr0 Сортировка вроде не работает, а внутренние элементы дерева(листья) перемещаются неверно (перескакивают с уровня на уровень) |
| Автор: Quadr0 10.11.2005, 14:52 |
| ... |
| Автор: Alexeis 10.11.2005, 15:02 |
| Quadr0 Ввел весь алфовит при нажатии на кнопку "сортировка по возрастанию", "сортировка по убыванию" ноль эмоций компилировал в delphi7 |
| Автор: Alix 10.11.2005, 15:19 | ||
| Well... Спасибо, Quadr0. Сортировка мне даром не была нужна, правда, но смысл ясен. Увидел naInsert - не поверил, что оно есть, полез в хелп - точно есть. Я просто уже смотрел moveTo, но не заметил там naInsert и долго, помниться, еще ругался, почему везде одни только naAdd'ы Еще мне не нужен был переход к родителю - это уже отдельные функции. В итоге мой код:
Глюков тоже больше нет |
| Автор: Quadr0 10.11.2005, 15:58 |
| ... |