Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как использовать Shell API SHBrowseForFolder

Delphi , Файловая система , Директории



Как использовать функцию Shell API SHBrowseForFolder чтобы позволить пользователю выбрать каталог?

uses ShellAPI, ShlObj;

procedure TForm1.Button1Click(Sender: TObject);
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 := Form1.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Please specify a directory';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then
  begin
    SHGetPathFromIDList(lpItemID, TempPath);
    ShowMessage(TempPath);
    GlobalFreePtr(lpItemID);
  end;
end;

Перевод контента на русский язык:

Функция SHBrowseForFolder является частью API оболочки и позволяет пользователям просматривать папки. Вот пример использования ее в вашем приложении Delphi:

uses ShellAPI, ShlObj;

procedure TForm1.Button1Click(Sender: TObject);
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 := Form1.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Пожалуйста, выберите папку';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS or BIF_EDITBOX;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemID <> nil then
  begin
    SHGetPathFromIDList(lpItemID, TempPath);
    ShowMessage(TempPath);
    GlobalFree(lpItemID); // примечание: не используйте GlobalFreePtr
  end;
end;

Вот что делает каждый участок кода:

  1. FillChar(BrowseInfo, sizeof(TBrowseInfo), #0): Инициализирует все байты в структуре BrowseInfo нулями.
  2. BrowseInfo.hwndOwner := Form1.Handle;: Определяет родительское окно для диалогового окна просмотра.
  3. BrowseInfo.pszDisplayName := @DisplayName;: Устанавливает начальную отображаемую имя элемента, который будет просматриваться.
  4. TitleName := 'Пожалуйста, выберите папку';: Определяет заголовок, который будет отображаться вверху диалогового окна просмотра.
  5. BrowseInfo.lpszTitle := PChar(TitleName);: Преобразует строку TitleName в null-terminated строку и присваивает ее полю lpszTitle.
  6. BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;: Определяет, как поведет диалоговое окно просмотра.
  7. lpItemID := SHBrowseForFolder(BrowseInfo);: Отображает диалоговое окно просмотра и возвращает его результат - указатель на структуру ITEMIDLIST, которая представляет собой выбранный элемент.
  8. if lpItemID <> nil then: Проверяет, был ли выбран каталог пользователем.
  9. SHGetPathFromIDList(lpItemID, TempPath);: Преобразует структуру ITEMIDLIST в строку пути.
  10. ShowMessage(TempPath);: Отображает выбранный путь как сообщение.
  11. GlobalFree(lpItemID);: Освобождает выделенную память для структуры ITEMIDLIST.

Обратите внимание, что вам не нужно использовать GlobalFreePtr, потому что это алиас для GlobalFree, и нет необходимости вызывать GlobalFreePtr. Также убедитесь, что замените Form1.Handle на реальный.handle вашей формы.

В статье описывается использование функции Shell API SHBrowseForFolder для позволения пользователю выбрать каталог и получение пути выбранного каталога.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-19 01:22:18/0.0033419132232666/0