![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Alexzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 9.4.2007 Где: Латвия Репутация: 1 Всего: 1 |
ShellTreeView
Хороший, стильный компонент. Можно очень наглядно и удобно организовать просмотр файлов. Но вот столкнулся с проблемой - работа с компонентом приводит к ошибкам. Ошибки самые различные, в разные моменты разные. Сначала о том, как я использую компонент. Свойство Root установлено в rtMyComputer. В свойстве ObjectTypes включены otFolders и otNonFolders. Другие свойства изначально не менялись. При пуске программы, по событию form.OnCreate читается ini файл и оттуда читается стринг, прежде сохранённое значение свойства ShellTreeView.path и соответственно в это свойство и направляется. Работа программы организована через событие ShellTreeView.OnChange. По каждому событию считывается свойство ShellTreeView.path, определяется файл это или нет, файл читается и анализируется. Первый трабл возник при работе с папкой, содержащей около 40 файлов с именами по 30-50 символов. Глюк заключался в следующем: Перебирая файлы сверху вниз на одном файле программа вдруг вылетала с ошибкой и закрывалась. Какая ошибка, я к сожалению не запомнил. Поначалу я думал, что виноват именно этот файл, менял его атрибуты, переименовывал его, но ошибка всегда возникала именно на этом файле. Все файлы выше и ниже программа легко открывала, а стоило кликнуть на этот файл как программа вылетала. Затем я этот файл удалил. И ошибка стала возникать на следующем файле, который встал в списке на место удалённого. Потом я на время отключил работу с ini файлом и проблема вроде исчезла. Но потом возникла другая - если хоть раз открыть в окне компонента папку содержащую более 500 файлов, то программу больше невозможно нормально закрыть. При закрытии она вываливается в ошибку. Проверено, ошибка точно зависит от работы с ShellTreeView. Если не открывать ни одной большой папки, то всё нормально. Если хоть раз хоть одну большую папку открыть, при закрытии программы она стабильно вываливается в ошибку. Если в большой папке перебирать файлы один за другим, то в определённый момент программа вываливается в ошибку. Иногда, если выбрав один файл некоторое время работать с программой а потом вернуться в окно ShellTreeView, то в нём больше не появляется инверсная строка показывающая текущий файл, индикатор системных ресурсов, установленный в трей, показывает резкий скачок загрузки процессора, и через секунд 5 программа вылетает с ошибкой. У меня складывается впечатление, что под какие-то данные компонента выделяется слишком мало места и они при работе затирают другие данные в памяти, а так-же другие данные могут затереть данные ShellTreeView. Ясно, что изначально невозможно предугадать с какими папками компоненту прийдётся работать, но ведь под любой объём данных должно автоматически выделяться место, или я не прав? А может я чего-то в начале не указал, чтобы так происходило? Вобщем нужен совет опытных программистов. Я в тупике. |
|||
|
||||
Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 1 Всего: 60 |
ShellTreeView это убого базовый TreeView. Лучше все делать самому ручками и для этих целий virtualtreeview уж точно не загнется в поставки с ним идет демы. там есть пример дерева каталогов до вольно быстро работает.... + ко все сему тут есть отличные статьи на форумы о нем в помощь в освоении..
-------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
BaD_SeCt0R |
|
|||
![]() Lazy Coder ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 9.10.2006 Где: Анапа Репутация: нет Всего: 18 |
Alexzz, как ни проверял, даже открывал папку с количеством файлов почти равным 5000. Да, работает жутко медленно, но никаких ошибок не обнаружил. Может дело у тебя в коде? Потоки используешь?
PS У меня D7. -------------------- Кто владеет информацией - владеет миром. (С) Френсис Бэкон. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Аналогично. Проверял с указанными параметрами. Похоже ошибка в чем-то другом либо при взаимодействии с другими компонентами. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alexzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 9.4.2007 Где: Латвия Репутация: 1 Всего: 1 |
Да, но в чём именно? Всё взаимодействие я уже описал. Всё что я делаю, это считываю свойство path. Я тут одно время думал, что проблема связана с сохранением path в ини-файл и восстановлении его при следующем запуске. Но теперь я даже это убрал. Трабл всё равно существует. Ничего не понимаю!
![]() Добавлено @ 17:09
Поподробнее пожалуйста, это есть в папках дельфи? В какой именно папке лежит эта демка? В списке компонентов у меня нету virtualTreeView. У меня 7 ентерпрайз. Это сообщение отредактировал(а) Alexzz - 29.9.2007, 17:10 |
|||
|
||||
BaD_SeCt0R |
|
|||
![]() Lazy Coder ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 9.10.2006 Где: Анапа Репутация: нет Всего: 18 |
А что в path? Может там у тебя значение инвалидное?
-------------------- Кто владеет информацией - владеет миром. (С) Френсис Бэкон. |
|||
|
||||
Alexzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 9.4.2007 Где: Латвия Репутация: 1 Всего: 1 |
Дык я туда ничего не пишу больше. Только читаю. И из полученной от туда строки нормально извлекается имя файла и путь к нему. |
|||
|
||||
BaD_SeCt0R |
|
|||
![]() Lazy Coder ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 9.10.2006 Где: Анапа Репутация: нет Всего: 18 |
Alexzz, если делать все так, как ты говоришь, то все работает. Может ты все-таки выложишь твой код работы с ShellTreeView, а то догадываться, что у тебя не так, довольно сложно.
-------------------- Кто владеет информацией - владеет миром. (С) Френсис Бэкон. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Это сторонний компонент тут в общих можно поискать есть подробное описание и все нужные ссылки. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alexzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 9.4.2007 Где: Латвия Репутация: 1 Всего: 1 |
Проблему победил.
Создал новый проект, нанёс на форму все те-же компоненты, расположил их так-же, и скопировал все процедуры обработки событий. Вобщем сделал всё то-же самое что и было, но с нуля. И проблема исчезла! Значит это был какой-то глюк самого дельфи. |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
скорее всего не исчезла, а спряталась до лучших времен ;) -------------------- There are always someone smarter than you... |
|||
|
||||
Alexzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 9.4.2007 Где: Латвия Репутация: 1 Всего: 1 |
Спасибо за заряд оптимизма! ![]() Но я всё-же надеюсь что исчезла. Только что опробовал программу на самых разных папках с самыми разными файлами и проблемы не возникло. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Вообще компонентик убогий.
Написан левой ногой и приводит к хорошим утечкам памяти. Уже из-за этого его не стоит использовать... |
|||
|
||||
Alexzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 9.4.2007 Где: Латвия Репутация: 1 Всего: 1 |
Ну,... уже использовал. Вроде пока работает.
Возник новый вопрос. Начал работать с прогой на стареньком компике у которого есть 3.5'' дисковод. Дело в том, что при каждом запуске проги этот шелтривью опрашивает все имеющиеся в системе накопители, в том числе и дисковод. И вот это действие сильно действует на нервы. Во первых это большая задержка, во вторых он начинает гонять головку дисковода взад-вперёд несколько раз туды-сюды, при этом возникает соответствующий бесящий меня звук. Вопрос: Можно ли каким-то образом запретить компоненту опрашивать дисковод при запуске? В крайнем случае сказать ему, что нету никаких дисководов в системе... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |