
в папке Black Lagoon ещё 2 папки в каждой из которых уже нет подпапок
а в папке !new1 есть ещё подпапки, в которых тоже могут быть подпапки
Подскажите или киньте ссылку на толковый мануал плиз

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
![]() ![]() |
![]() |
kr3v3tkus |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
подскажите плз как осуществляется работа с TShellListView и TShellTreeView, конкретнее - необходимо указать директорию, у которой в нутри есть папки, для каждой из них сделать проверку SelectedFolder.SubFolders, если подпапок нет - совершить какое-либо действие, если же есть - то уйти вниз ещё на уровень и снова совершить предыдущее действие. Тоесть например:
![]() в папке Black Lagoon ещё 2 папки в каждой из которых уже нет подпапок а в папке !new1 есть ещё подпапки, в которых тоже могут быть подпапки Подскажите или киньте ссылку на толковый мануал плиз ![]() -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
Better Kind |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 52 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
рекурсия
-------------------- With best regards, Better Kind
|
kr3v3tkus |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
ммм я наверно оч туманно выразился ^__^ проблема в навигации - в TShellListView есть back, она вверх на уровень идёт, а вот как заставить его войти в папку?...
-------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
kr3v3tkus |
![]()
Сообщение
#4
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
хмм ладно - а если у меня есть такой код
Код if (Lw.Selected.SubItems[5] = 'dir') then begin Edit.Text := Edit.Text + Lw.Selected.Caption + '\'; AddFile(Edit.Text + '*.*', faAnyFile); end; AddFile расшаривает все файлы в директории указанной в эдите Как модифицировать эту процедуру чтобы она делала обход всех папок? я пробовал делать так Код for i := 0 to Lw.Items.Count do begin lw.Selected := lw.Items.Item[i]; но так не хочет... -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата if (Lw.Selected.SubItems[5] = 'dir') then begin ![]() Ты об этом, что-ли: procedure AddFile(path: string); |
kr3v3tkus |
![]()
Сообщение
#6
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
volvo
домо аригато ^__^ опять спас ![]() нащёт пяти - это я с книги брал и тупо переписал :[ вернее я не так понял что там написано было - думал чтото типа параметра файла который отвечает за папку, и недоумевал почему его назвали сабитемс ![]() -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
kr3v3tkus |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
а вот такой вопросик - есть вот такая структура папки
![]() ![]() в папке субтитров файлы на картинке справа у меня стоит такая проверка для учёта папки if (pos('.avi', SearchRec.Name))or(pos('.mkv', SearchRec.Name))or(pos('.VOB', SearchRec.Name))
ну есессно так для каждого формата так вот - почему у меня не считается эта папка? ![]() anime зы и почему когда считываеш путь папки - если встречается символ # то начиная с него обрубается всё? ![]() -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата почему у меня не считается эта папка? Что имеется в виду "не считается"? Папка появляется в Гриде, проверил. Количество видео-файлов в ней тоже появляется. Все ее подпапки тоже появляются, тоже проверил. Картинок не вижу никаких вообще, что именно у тебя "сдвигается" - непонятно.Кстати, 1. if не совсем корректное условие. В данном случае оно, возможно, как раз и делает, что нужно, но вообще подобного следует избегать... 2. if (pos('.avi', SearchRec.Name) <> 0) ...все-таки я бы записал: if UpperCase(ExtractFileExt(SearchRec.Name)) = 'AVI', мало ли, будет записано в другом регистре и все, не найдутся файлы... 3. Однотипные действия для разных расширений очень просто выносятся в отдельную процедуру... |
kr3v3tkus |
![]()
Сообщение
#9
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Цитата Что имеется в виду "не считается"? Папка появляется в Гриде, проверил. Количество видео-файлов в ней тоже появляется. Все ее подпапки тоже появляются, тоже проверил. Картинок не вижу никаких вообще, что именно у тебя "сдвигается" - непонятно. действительно в гриде есть... а в выходном хтмл файле нету... блин ![]() нащёт регистра - я тоже думал, изза этого проблема была с vob, просто незнал как сделать ![]() а нащёт однотипных действий - я просто ночью делал - лиш бы уж както сделать ![]() ![]() зы ты знаешь, действительно исправил я условия, правда эффект не совсем тот получился - теперь и в гриде не отображает эту папку ззы как ты и сказал - переделал всю процедуру так Код procedure VideoShare(path: string; SearchRec:TSearchRec); var AType: TStringList; ext: string; begin AType := TStringList.Create; if (UpperCase(ExtractFileExt(SearchRec.Name)) = '.AVI')or(UpperCase(ExtractFileExt(SearchRec.Name)) = '.MKV') or(UpperCase(ExtractFileExt(SearchRec.Name)) = '.VOB')or(UpperCase(ExtractFileExt(SearchRec.Name)) ='.OGM') or(UpperCase(ExtractFileExt(SearchRec.Name)) = '.MP4') then begin inc(vcount); ext := UpperCase(ExtractFileExt(SearchRec.Name)); ext := copy(ext, 2, length(ext)-1); if pos(ext, Form1.Grid.Cells[4,gridcell-1]) = 0 then begin if Form1.Grid.Cells[4,gridcell-1] = '' then begin Image(path); PathList.Add(path); infill(path, AType); end; Form1.Grid.Cells[4,gridcell-1] := Form1.Grid.Cells[4,gridcell-1] + ext + ' '; end; end; AType.Free; end; правда теперь снова в гриде нет папки - а картинка её высвечивается в хтмлке ![]() Сообщение отредактировано: kr3v3tkus - -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
kr3v3tkus, извини, не мог пройти мимо твоего кода. Там есть небольшая проблема с обходом директорий... Смотри, как можно это сделать чуть-чуть по-другому (постараюсь прокомментировать, если что непонятно - спрашивай...):
type |
kr3v3tkus |
![]()
Сообщение
#11
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Цитата извини, не мог пройти мимо твоего кода да я тоже без судорог на него не мог смотреть ![]() ![]() вроде просмотрел, всё более менее понятно кроме Код T = (_avi, _mkv, _vob, _ogm, _mp4); Код strT: array[T] of string = ( '.avi', '.mkv', '.vob', '.ogm', '.mp4' ); вот чегот непонимаю зачем это? что вообще означает нижнее подчёркивание? ![]() -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Просто привычка, можешь без нижнего подчеркивания делать. Главное - чтобы имя не повторяло никаких зарезервированных слов и идентификаторов, а с подчеркиванием вероятность этого значительно уменьшается.
Цитата чегот непонимаю зачем это? Затем, что T - это пользовательский тип, переменные этого типа нельзя распечатывать, но можно из них создать множество. А strT - это константа, массив строк, которые можно печатать, но вот, скажем, множество из них (из строк, в смысле) уже сделать не получится. Я остановился на том, что лучше сделать массив, индексируемый моим перечислимым типом, чтобы иметь возможность создавать множество значений (экономия места и времени обработки), и в то же время сохранить возможность как-то визуализировать это множество... |
kr3v3tkus |
![]()
Сообщение
#13
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
блиин
![]() ![]() -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата если не обнулять то косяки получаются Это какие, например? Если обнулить при FormCreate и при FormDestroy, скажем - не должно быть косяков. |
kr3v3tkus |
![]()
Сообщение
#15
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
я имею ввиду: выбираем папку. делаем StartClick, вдруг надо на другом диске ещё папку обойти - мы снова делаем StartClick и тут получается что заново заполняются count и types
-------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Цитата тут получается что заново заполняются count и types Сорри, но "другой диск" - это значит "другой path", поэтому (если инициализировать arr не при нажатии "Start", а при старте формы, а удалять - при завершении приложения, или по какой-нибудь особой кнопке "Очистить"), все будет как положено - новые папки будут добавляться в контейнер. |
kr3v3tkus |
![]()
Сообщение
#17
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
ну вот у меня он на первый взгляд если по папке добавлять то ко всем types нижних элементов ещё свои прикручивает =\ просто тады поставлю обнуление types на новые файлы
зы хмм ток чёт немогу понять где -___- ![]() просто вот так получаеца если по папке добавлять Сообщение отредактировано: kr3v3tkus - -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
procedure TForm1.StartClick(Sender: TObject);Ну, и процедуры стали методами класса формы: ... |
kr3v3tkus |
![]()
Сообщение
#19
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
блин
![]() Цитата [Error] MainUnit.pas(86): Undeclared identifier: 'arr' [Error] MainUnit.pas(86): Incompatible types [Hint] MainUnit.pas(35): Private symbol 'MyAddFolderToContainer' declared but never used итд((( -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Ну, перенести-то заголовки перенес, а изменить в реализации:
procedure TForm1.MyAddFolderToGrid(path: string); // <--- и т.д.? |
![]() ![]() |
![]() |
Текстовая версия | 9.03.2021 2:32 |