|
Написал Snowy
|
|
04.05.2011 |
Функция выбора каталога принимает на входе 3 параметра:
- Заголовок диалога
- Папку, выбранную по умолчанию
- Хэндл родительского окна
Возвращает выбранный путь или пустую строку, в случае отмены выбора.
function BrowseForFolder (const caption: String; folder: String; FormHandle: THandle): String;
function BFFCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): integer; stdcall;
begin
if uMsg = BFFM_INITIALIZED then SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
result := 0;
end;
var
TitleName : String;
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 := FormHandle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := Caption;
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := bif_NewDialogStyle;
BrowseInfo.lpfn := @BFFCallbackProc;
BrowseInfo.lParam := dword(pchar(folder));
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
GlobalFreePtr(lpItemID);
Result := TempPath;
end
else
Result := '';
end;
Пример вызова:path := BrowseForFolder('Select a folder, please', 'C:\Temp', Handle);
|