Программирование в Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.

Читать онлайн книгу Программирование в Delphi. Трюки и эффекты - Александр Чиртик страница 26

СКАЧАТЬ 2.28. Окно для выбора папки

      function ShowChooseFolder(strTitle: string):string;

      var

      choose: BROWSEINFO;

      buffer: string;

      pidl: PItemIDList;

      begin

      ZeroMemory(Addr(choose), SizeOf(choose));

      SetLength(buffer, MAX_PATH);

      //Заполнение структуры для окна

      choose.hwndOwner:= hParentWnd;

      choose.pi dlRoot:= nil; //Корень – папка Рабочего стола

      choose.pszDisplayName:= PAnsiChar(buffer);

      choose.lpszTitle:= PAnsiChar(strTitle);

      choose.ulFlags:= 0;

      //Вывод окна и обработка результата

      pidl:= SHBrowseForFolder(choose);

      if (pidl <> nil) then

      begin

      //Получение полного пути выбранной папки

      SHGetPathFromIDList(pidl, PAnsiChar(buffer));

      ShowChooseFolder:= buffer;

      DeletePIDL(pidl);

      end

      else

      ShowChooseFolder:= '';

      end;

      Представленная в листинге 2.28 функция ShowChooseFolder возвращает полный путь указанной папки, если она выбрана, и пустую строку в противном случае. Само окно Обзор папок показано на рис. 2.5.

      Рис. 2.5. Окно для выбора папки

      Особенностью использованной в данном примере функции SHBrowseForFolder является то, что она возвращает не путь выбранной папки, а указатель на структуру ItemlDList (что-то вроде внутреннего представления путей). Для извлечения построения пути по содержимому этой структуры используется функция SHGetPathFromIDList. После этого структура становится больше не нужна, и ее следует удалить (с использованием специального интерфейса IMalloc). Для этого используется процедура DeletePIDL, реализованная в листинге 2.29.

Листинг 2.29. Удаление структуры ItemlDList

      procedure DeletePIDL(pidl: PItemIDList);

      var

      pMalloc: IMalloc;

      begin

      SHGetMalloc(pMalloc);

      if (pMalloc <> nil) then

      begin

      pMalloc.Free(pidl);

      pMalloc._Release();

      end;

      end;

      Функцию SHBrowseForFolder (листинг 2.28) можно использовать и для указания принтеров или компьютеров. Для этого достаточно установить флаги BIF_ BROWSEFORCOMPUTER и BIF_BROWSEFORPRINTER соответственно:

      choose.ulFlags:= BIF_BROWSEFORCOMPUTER;

      и

      choose.ulFlags:= BIF_BROWSEFORPRINTER;

      Чтобы в окне отображались еще и значки файлов, нужно установить флаг BIF_ BROWSEINCLUDEFILES.

      Окна подключения и отключения сетевого ресурса

      Часто бывает удобно осуществлять доступ к сетевым папкам так же, как и к локальным дискам компьютера (с использованием того же принципа построения пути). Окна подключения и отключения сетевого ресурса дают пользователю возможность выбрать, какие папки считать сетевыми дисками и какие сетевые диски можно отключить.

      Вид окна подключения сетевого ресурса в Windows XP показан на рис. 2.6.

      Рис. 2.6. Окно подключения сетевого диска

      Для вызова окна подключения сетевого ресурса можно использовать функцию, приведенную в листинге 2.30.

Листинг 2.30. Окно подключения сетевого ресурса

      function ShowConnection(): BOOL;

      begin

      ShowConnection:=

      WNetConnectionDialog(hParentWnd, RESOURCETYPE_DISK) = NO_ERROR;

      end;

СКАЧАТЬ