![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Client |
![]()
Сообщение
#1
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Привет
![]() Надо сделать дерево для директории. основываясь на коде для поиска файлов с выводом в memo, вот что получилось procedure FindFiles(const Path, Mask: String; node: TTreeNode);но не правильно. Добавлено через 10 мин. procedure FindFiles(const Path, Mask: String; node: TTreeNode);Добавил локальную переменную - все заработало. Чудеса, а не рекурсия ![]() А можно сделать, чтобы файлы были упорядочены по алфавиту (это есть) и по типу - т.е. сначала были папки, а потом файлы ? Сообщение отредактировано: Client - 10.04.2010 18:53 Эскизы прикрепленных изображений ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Разбей на 2 части: поиск папок и поиск файлов...
procedure FindFiles(const Path, Mask: String; node: TTreeNode); |
Client |
![]()
Сообщение
#3
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
даже и не догадался бы
![]() Спасибо ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Если не очень хочется делать двойную работу (проходить заново по всем файлам/папкам может быть накладно, если файлов много), то можно обойтись и без этого:
procedure FindFiles(const Path, Mask: String; node: TTreeNode); |
Client |
![]()
Сообщение
#5
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
если честно - то не понял смысл всего этого. Рекурсивный вызов происходит только для папок, значит стринглист создается для каждой папки свой, причем туда записывается сначала папки, потом файлы.
При возврате рекурсии стринглист записывается в treeview. Добавлено через 3 мин. ОПА! ![]() прочитал и понял ![]() Цитата При возврате рекурсии стринглист записывается в treeview. Еще застрял на этом месте, а ведь тут самое простое - для каждого подкаталога идет новая ветка.Чудо рекурсия ![]() И правда - двойная экономия тут. volvo - ты гений. ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата причем туда записывается сначала папки, потом файлы. Это ты сейчас о чем? Я вообще не пишу папки в StringList. Они сразу уходят в TreeView... А вот те файлы, которые встретились при переборе FindNext-ом, да, пишутся в StringList... И потом, после окончания перебора, выводятся в TreeView...А тебе вопрос на засыпку: что надо сделать в твоем коде, чтобы папки шли в начале, а потом - файлы, отсортированные по убыванию имен? Мне достаточно добавить функцию сортировки Стринглиста. А тебе? |
Client |
![]()
Сообщение
#7
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата Они сразу уходят в TreeView да, точно ![]() Цитата А тебе вопрос на засыпку даже не знаю - если в самой папке соритовку сделать это точно не поможет ![]() ![]() Можно попробовать так - проверять по названию, папка или файл, и от этого уже перемещать элементы treeview. но это очень коряво выйдет, хотя может и не очень ![]() Есть еще вопрос: как можно к элементам treeview добавть информацию? мне надо хотя бы число привязать к каждому элементу |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Что значит "привязать"? Допустим, привязал. Что дальше с этим числом будет происходить?
|
Client |
![]()
Сообщение
#9
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
значение - это ID поле в таблице. По нему буду обращаться к записи.
Это как бы графическое представление таблицы. |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
var При клике на вторую кнопку показывает "индекс" данного элемента (Фактичесли - порядковый номер, под которым элемент был внесен в TreeView). Тебе это надо было? |
Client |
![]()
Сообщение
#11
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата Тебе это надо было? Как раз то, что доктор прописал ![]() Все работает, что сегодня хотел то сделал Спасибо (да блин, опять не могу еще 1 плюсик поставить. Ну ничего, "завтра" на форуме настанет через часик ... ![]() Сообщение отредактировано: Client - 10.04.2010 22:07 |
Client |
![]()
Сообщение
#12
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
а форум хитрый...
![]() |
Client |
![]()
Сообщение
#13
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Понадобилось вывести все элементы для выбранного узла. Написал так, но он обходит еще и все вложенные элементы, а надо без вхождения в подпапки.
У GetNextChild что за параметр? указатель на предка? procedure TForm3.Button3Click(Sender: TObject); |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Зачем лишние действия?
procedure TForm3.Button3Click(Sender: TObject); Update: procedure TForm1.Button2Click(Sender: TObject);Так еще проще будет... |
Client |
![]()
Сообщение
#15
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Спасибо
![]() но думаю вопросы будут еще... |
Client |
![]()
Сообщение
#16
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Только заметил Update
![]() А почему нету "Сообщение отредактировано" (следовательно сообщение не появилось в списке непрочтенных)? такая админская штучка? ![]() Update Пробую через "Быстрое редактирование"... Сообщение отредактировано: Client - 11.04.2010 21:02 |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Нет... Потому, что я редактировал через "Быстрое редактирование", а оно устроено таким образом, что если метка "Сообщение было отредактировано..." уже была, то она обновится. Но если ее не было вообще - то она и не появится.
|
Client |
![]()
Сообщение
#18
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
И снова Здравствуйте
![]() В DRKB нашел код для удаления папки вместе с содержимым. В treeview щелкаю на "папку" правой кнопкой - появляестя меню (свое, там есть кнопка удалить), выбираю удалить. Если папка пустая или в ней только файлы - то проблем нету. А если в ней есть подпапки - то содержимое папок удаляется, а с папками непонятно что творится. Function MyRemoveDir(sDir : String) : Boolean; Эскизы прикрепленных изображений ![]() ![]() ![]() |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Как вызываешь эту MyRemoveDir, покажи? Какой путь передается туда?
|
Client |
![]()
Сообщение
#20
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Этой функцией получаю путь
function SrNodeTree(pTreeNode: TTreeNode): string; //full path Вызываю так. Также для теста в Edit копировал путь папки - результат такой же s := SrNodeTree(TreeView1.Selected); Сообщение отредактировано: Client - 12.04.2010 17:46 |
![]() ![]() |
![]() |
Текстовая версия | 14.07.2025 2:01 |