DirectoryListBox - движение по подкаталогам

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Всем привет! Такая вот штука, у меня уже голова опухла, от того что не могу разобраться с алгоритмом перемещения по подкаталогам ))

Как написать такой код, чтоб не пропустить ни одного подкаталога )) Т.е. пользователь выбрал каталог, и хочет из него и всех его подкаталогов выбрать нужные файлы. С выбором файлов вопросов нет, а вот как автоматически двигаться и в каком направлении по каталогам, не могу сообразить....

Используем компоненту ТShellTreeView, с ней полегче... мне кажется... DirectoryListBox - слишком дубовая........
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 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
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Ну вот, поменял компоненту, и сразу ответ нашелся

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
Откуда: СПБ
Контактная информация:

обычно это делалось рекурсивной процедурой...
Изображение
sasha3050
Сообщения: 26
Зарегистрирован: 04 окт 2008, 23:13

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