Здравствуйте, Хукаленко Дмитрий!
Для таких целей я использовал модуль 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.