Консультация № 143684
11.09.2008, 22:51
0.00 руб.
0 2 2
Уважаемые эксперты, подскажите пожалуйста: какой фильтр нужно установить в OpenDialog, чтобы можно было выбрать не файл, а папку?

Обсуждение

Неизвестный
11.09.2008, 23:48
общий
это ответ
Здравствуйте, Хукаленко Дмитрий!
Для таких целей я использовал модуль BrowseFolderDlg (см. в приложении).
Пишите в основной программе
uses BrowseFolderDlg;
А для выбора папки вызываете функцию BrowseFolder(handle, caption). В качестве handle указываете handle используемой формы. Caption - заголовок (по умолчанию пустой).
Данный модуль был сделан мной из компонента BrowseFolderDlg.

Удачи!


Приложение:
unit BrowseFolderDlg;

interface

uses ShellApi, ShlObj, Windows;

function BrowseFolder(handle : THandle; caption : string = '' ) : string;


implementation

function BrowseFolder(handle : THandle; caption : string = '' ) : string;
var
lpItemID: PItemIDList;
BrowseInfo: TBrowseInfo;
DisplayName: array[0..MAX_PATH] of char;
TempPath: array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := Handle;
BrowseInfo.pszDisplayName := @DisplayName;
BrowseInfo.lpszTitle := PChar(caption);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
result := TempPath;
GlobalFreePtr(lpItemID);
end
else
result := '';
end;

end.
Неизвестный
11.09.2008, 23:49
общий
это ответ
Здравствуйте, Хукаленко Дмитрий!
Для етого нужно использовать функцию SelectDirectory, которая объявлена в модуле FileCtrl. У нее три параметра: оглавление окна, корневой каталог, переменная-результат.

Пример использования:

...
uses ... FileCtrl;
...
var Dir:string;
...
SelectDirectory('Укажите каталог установки программы', '', Dir);

В итоге откроется диалог выбора папки, и путь к ней окажется в переменной Dir.
Форма ответа