
Kylix. Работа с компонентами
Xakep, номер #033, стр. 033-062-2
repeat
Действие
until Условие;
Этот цикл последовательно выполняет "Действие", пока "Условие" верно. В качестве условия у нас стоит функция, возвращающая следующий найденный файл. Пока файлы находятся сами собой, будет выполняться действие, которое заполняет ListView1 именами найденных файлов.
Все. Все остальное можно понять по комментариям. Так что теперь давай еще немного поШкодим. Для этого вернись к форме. Выдели компонент ListView1 и создай для него обработчик события OnDblClick. В этом обработчике напиши все, что есть в листинге 3.
Этим мы поймали событие двойного клика по элементу из ListView и перешли в новое место на диске.
Заключение
Конечно же, в проге еще полно недостатков, но она работает. Нам главное - понять принцип, а дальше уже полетим как на коньках. Для общего развития можешь еще создать обработчик события OnChange у ComboBox1 и написать туда одну лишь строку: ListDir(Combobox1.Text);. Так ты сможешь переходить в любую папку, сохраненную в Combobox1.
Со временем мы будем улучшать пример, а улучшать есть что. Например, нужно по-разному отображать и обрабатывать файлы и папки. А в данном варианте, если ты дважды кликнешь по файлу, то прога будет пытаться его открыть как папку. Ну, в общем, работы еще полно. Так что встретимся через месяц на том же месте.
Примеры можно забрать на www.x-c-r.com.
ХХХХ Листинг 1 ХХХХ
procedure TForm1.FormShow(Sender: TObject);
begin
ListDir('/');
end;
ХХХХ Листинг 2 ХХХХ
procedure TForm1.ListDir(dir: String);
var
sr: TSearchRec;
begin
//Очистить содержимое ListView1
ListView1.Items.Clear;
//Начать поиск и найти первый файл.
if FindFirst(dir+'*', faAnyFile, sr) = 0 then
begin
repeat
// Добавить в ListView1 имя найденного файла
ListView1.Items.Add.Caption:=sr.Name;
//Найти следующий файл и перейти на repeat.
until FindNext(sr) <> 0;
//Закрыть поиск
FindClose(sr);
end;
//Запомнить текущее положение пути
Path:=dir;
//Если этого пути нет в выпадающем списке ComboBox1
//То добавить его
if ComboBox1.Items.IndexOf(Path)=-1 then
ComboBox1.Items.Add(Path);
//Если количество элементов в ComboBox1 больше
//20 то удалить первый
if ComboBox1.Items.count>20 then
ComboBox1.Items.Delete(0);
//Показать путь в строке ComboBox1.Text
ComboBox1.Text:=Path;
end;
ХХХХ Листинг 3 ХХХХ
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
//Если ты дважды щелкнул по элементу "точка", то path:='/'
if ListView1.Selected.Caption='.' then Path:='/'
else
//Если по двум точкам, то подняться на один уровень
if ListView1.Selected.Caption='..' then
begin
path:=copy(Path,1,Length(Path)-1);
Path:=ExtractFilePath(Path);
еnd
еlse
//Если не то и не другое, то, значит, ты щелкнул по папке.