Всем привет! Такая вот штука, у меня уже голова опухла, от того что не могу разобраться с алгоритмом перемещения по подкаталогам ))
Как написать такой код, чтоб не пропустить ни одного подкаталога )) Т.е. пользователь выбрал каталог, и хочет из него и всех его подкаталогов выбрать нужные файлы. С выбором файлов вопросов нет, а вот как автоматически двигаться и в каком направлении по каталогам, не могу сообразить....
Используем компоненту ТShellTreeView, с ней полегче... мне кажется... DirectoryListBox - слишком дубовая........
DirectoryListBox - движение по подкаталогам
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Я проблему вижу такую - сколько уровней в дереве каталогов столько циклов мне нужно, чтоб по ним пробегать...
Вот что на данный момент намутил... белеберда честно говоря )))) Но думаю куда-то в эту сторону копать нужно ))))
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
s,i:Integer;
begin
ListBox1.Clear;
//-----------Открыть первую папку и каждую первую подпапку----------
i:=DirectoryListBox1.ItemIndex+1;
s:=DirectoryListBox1.ItemIndex;
ListBox1.Items.Add(DirectoryListBox1.Items.Strings[DirectoryListBox1.ItemIndex]);
repeat
DirectoryListBox1.ItemIndex:=i;
ListBox1.Items.Add(DirectoryListBox1.Items.Strings[i]); // Вместо этой строки можно воткнуть любон действие с открытой папкой
DirectoryListBox1.OpenCurrent;
i:=i+1;
until DirectoryListBox1.count-1=DirectoryListBox1.ItemIndex;
//-----------Закрыть открытые папки и вернуться в начальную папку----------
i:=i-2;
s:=s-1;
repeat
DirectoryListBox1.ItemIndex:=i;
DirectoryListBox1.OpenCurrent;
ListBox1.Items.Add(DirectoryListBox1.Items.Strings[i]);
i:=i-1;
until s=i;
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Ну вот, поменял компоненту, и сразу ответ нашелся
t:=1;
repeat
ShellTreeView1.Items.Item[t].Expand(false);
t:=t+1;
until t=ShellTreeView1.Items.Count-1;
t:=1;
repeat
ShellTreeView1.Items.Item[t].Expand(false);
t:=t+1;
until t=ShellTreeView1.Items.Count-1;
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
обычно это делалось рекурсивной процедурой...

Пожалуйста помогите очень нужно!!!!!!!!!Написать программу на Paskal, которая вычисляет среднюю длину слов в файле, который содержит текст.В данном случае будет считатьтся любая строка символов, которая начинается и заканчивается одним с следующих елеметов: пробел, запятая, точка, начало строки и конец строки.В программе должна быть обозначена функция, которая получает в качестве аргумента поток ввода с файла.