![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Как использовать Shell API SHBrowseForFolder 2Delphi , Файловая система , ДиректорииАвтор: Анатолий threadvar myDir: string; function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): integer; stdcall; begin Result := 0; if uMsg = BFFM_INITIALIZED then SendMessage(hwnd, BFFM_SETSELECTION, 1, LongInt(PChar(myDir))) end; function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string): Boolean; var WindowList: Pointer; BrowseInf! o: TBrowseInfo; Buffer: PChar; RootItemIDList, ItemIDList: PItemIDList; ShellMalloc: IMalloc; IDesktopFolder: IShellFolder; Eaten, Flags: LongWord; begin myDir := Directory; Result := False; FillChar(BrowseInfo, SizeOf(BrowseInfo), 0); if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then begin Buffer := ShellMalloc.Alloc(MAX_PATH); try RootItemIDList := nil; if Root <> '' then begin SHGetDesktopFolder(IDesktopFolder); IDesktopFolder.ParseDisplayName(Application.Handle, nil, POleStr(Root), Eaten, RootItemIDList, Flags); end; with BrowseInfo do begin hwndOwner := Application.Handle; pidlRoot := RootItemIDList; pszDisplayName := Buffer; lpfn := @BrowseCallbackProc; lParam := Integer(PChar(Directory)); lpszTitle := PChar(Caption); ulFlags := BIF_RETURNONLYFSDIRS or $0040 or BIF_EDITBOX or BIF_STATUSTEXT; end; WindowList := DisableTaskWindows(0); try ItemIDList := ShBrowseForFolder(BrowseInfo); finally EnableTaskWindows(WindowList); end; Result := ItemIDList <> nil; if Result then begin ShGetPathFromIDList(ItemIDList! , Buffer); ShellMalloc.Free(ItemIDList); Directory := Buffer; end; finally ShellMalloc.Free(Buffer); end; end; end; Программный код на Delphi, использующий API оболочки для поиска папки! Вот разбивка кода: Функция SelectDirectory Эта функция является основным точкой входа для поиска директории. Она принимает три параметра: Caption, Root и Directory. Первые два используются в качестве вводных данных, а третий - это параметр вывода, который будет содержать выбранную директорию пути. Вот что функция делает:
Функция BrowseCallbackProc Эта функция - это функция обратного вызова, которая будет вызвана диалогом поиска при необходимости обновления состояния или извлечения информации от пользователя. Вот что функция делает:
Советы и альтернативы
Как использовать функцию SHBrowseForFolder для открытия диалогового окна выбора папки в приложении Delphi. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Директории ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |