Возникла задача, в которой нужно вызвать диалоговое окно выбора папки. Если нужно сделать выбор файла можно просто разместить на форме не визуальный компонент OpenDialog написать код взаимодействия и все готово. Для диалогового окна выбора папки структура немного другая.
Сперва нужно добавить модуль FileCtrl, если конечно его еще нет в списке подключенных модулей. В данном модуле есть две функции SelectDirectory:
function SelectDirectory ( const Caption : string; const StartDir : WideString; out ChosenDir : string ) : Boolean;где: Caption - Текст заголовка окна;
StartDir - Рабочая директория, в которую мы переместимся при открытии диалогового окна выбора папки.
ChosenDir - Выбранный каталог
Если пользователь, в диалоговом окне выбора папки, нажал "ОК" - результат вернется True и выбранный каталог будет записан в переменную ChosenDir.
function SelectDirectory ( var CurrDir : string; DialogOptions : TSelectDirOpts ; HelpContext : Longint ) : Boolean;где: CurrDir - Базовая рабочая директория, в которую мы переместимся при открытии диалогового окна выбора папки.
DialogOptions - настройка диалогового окна выбора папки. Может принимать следующие параметры: sdAllowCreate, sdPerformCreate, sdPrompt.
sdAllowCreate - Диалоговое окно выбора папки будет содержать поле редактирования имени каталога, в которое можно вводить имя несуществующего каталога.Указанное имя будет записано в переменную Directory, но при этом сам каталог создан не будет.
sdPerformCreate - Параметр используется только совместно с величиной sdAllowCreate. Когда пользователь вводит несуществующий каталог, функция создает его.
sdPrompt - Параметр используется только совместно с величиной sdAllowCreate. Если пользователь введет имя не существующего каталога, то будет выведено окно на подтверждение создания каталога. Если параметр Options содержит значение sdPerformCreate и пользователь нажимает кнопку OK в диалоговом окне выбора каталога, то указанный каталог создается. В противном случае, каталог создан не будет.
HelpContext - указывает контекст системы помощи, который будет активирован при нажатии кнопки F1
Примеры использователя:
var SelectedDirName:string;Результат представлен на Рис.1. (В системе Windows Vista диалоговое окно выбора каталога будет выглядит следующим образом)
begin
...
SelectDirectory('Выберите каталог','V:\',SelectedDirName);
....
end;
Рис.1.
4 комментария:
Для того чтобы дерево папок развернулась до указанной папки нужно передать в SelectedDirName тот путь который нужно открыть
Не получается получить каталог на FTP сервере. Это можно как то реализовать (если можно, опишите с примером)?
Вот пример не мой:
Lst:= TStringList.Create;//Список файлов и папок.
Tmp:= TStringList.Create;//Временный список
idFtp1.List(Tmp, '', false);//Получаем список папок в корневом каталоге...
Lst.AddStrings(Tmp);//переписываем из временного списка в наш список...
count:= 0;//Начальная позиция сканирования
LstCount:= Lst.Count;//конечная позиция сканирования
For n:= 0 to 1 do //Глубина сканирования...
begin
For i:= count to LstCount-1 do//Сканируем часть списка...
begin
try
idFtp1.List(Tmp, Lst.Strings+'/', FALSE);//пытаемся получить список вложенных файлов.
application.ProcessMessages;
except continue//Не пустили - идем дальше...
end;
Lst.AddStrings(Tmp);//Приписали в список файлов все найденные файлы...
end;
count:= LstCount;//Запомнили новую начальную..
LstCount:= Lst.Count;//...и конечную позиции...
end;//После чего сканим следующий кусок...
for nn:=0 to lst.Count-1 do listbox1.Items.add(lst.Strings[nn]);
procedure TForm1.Button1Click(Sender: TObject);
var
SelDirectory : string;
begin
if SelectDirectory('Выберите каталог', '', SelDirectory)
then ShowMessage('Выбранный каталог = '+SelDirectory)
else ShowMessage('Выбор каталога прервался');
end;
Отправить комментарий