Давайте добавим к нашему файловому менеджеру возможность путешествия по папкам и запуска файлов. Для этого нужно создать обработчик события ondblclick для компонента Listview и написать в нем содержимое листинга:
procedure TForm1.ListViewlDblClick(Sender: TObj ect); begin //Это папка?
if (ListViewl.Selected.Subltems[5] = 'dir') then
begin
//Если да, то прибавить имя выделенной папки к пути
//и перечитать файлы из нее.
Edit1.Text:=Editl.Text+ListViewl.Selected.Captions+''';
AddFile(Edit1.Text+'*.*',faAnyFile) end else //Если нет, то это файл и я его запускаю.
ShellExecute(Application.MainForm.Handle, nil,PChar(Editl.Text+ListViewl.Selected.Caption), '', PChar(Edi11.Text), SWJSHOW);
end;
В этом коде в самом начале осуществляется проверка произведенного выбора (по какому объекту был произведен щелчок мышью). Если это папка, то надо перейти в нее, а если файл, то надо его запустить. Для этого проверяется пятый дополнительный параметр выделенного элемента:
ListViewl.Selected.Subltems[5]='dir'
Когда мы добавляли элементы и дополнительные параметры в Listview, то в качестве пятого для папок указывали значение 'dir', а для файлов — 'file'. Теперь надо только проверить этот параметр.
Если выделенная строка— это папка, то мы изменяем текст текущей папки в Editl.Text и перечитываем ее с помощью вызова AddFile, указав новое значение папки.
Если выделенная строка— это файл, то его надо запустить. Это можно сделать С ПОМОЩЬЮ вызова функции ShellExecute. У функции следующие параметры:
- программа, отвечающая за запуск приложения. Здесь можно указать значение nil, НО МЫ укажем главное ОКНО программы (Application.MainForm.Handle);
- строка, указывающая на операцию, которую надо выполнить. Укажем nil для запуска файла;
- строка, содержащая полный путь к файлу;
- строка параметров, передаваемых программе в командной строке;
- папка по умолчанию;
- команда показа. Здесь мы укажем sw_show для нормального отображения окна. Можно указать и другие параметры (все команды вы найдете в файле помощи), но чаще всего используются sw_show (нормальный режим), sw_showmaximized (показать максимизировано) или sw_showminimized (показать в свернутом состоянии).
ВНИМАНИЕ. Функция ShellExecute объявлена в модуле shellapi, поэтому его необходимо добавить в раздел uses, иначе Delphi не сможет откомпилировать проект.