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

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

Название: Delphi. Трюки и эффекты

Автор: Александр Чиртик

Издательство:

Жанр: Программы

Серия:

isbn: 978-5-911-80219-6

isbn:

СКАЧАТЬ style="font-size:15px;">      end

      else ShowChooseFont := False;

      end;

      Здесь используются флаги окна, имеющие следующие значения:

      • CF_BOTH – отображать экранные и принтерные шрифты (для показа экранных или принтерных шрифтов можно использовать флаги CFSCREENFONTS и CF_PRINTERFONTS соответственно);

      • CF_INITTOLOGFONTSTRUCT – выбрать в диалоговом окне шрифт, соответствующий (или максимально похожий) шрифту, описываемому структурой LOGFONT, указатель на которую сохраняется в поле lpLogFont.

      Окно выбора папки

      Чтобы иметь возможность пользоваться окном Обзор папок для выбора папки, можно использовать листинг 2.28.

Листинг 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.pidlRoot := 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 (что-то вроде внутреннего представления путей). Для извлечения построения пути по содержимому этой структуры используется функция SHGetPathFromlDList. После этого структура нам больше не нужна, и ее следует правильно удалить (с использованием специального интерфейса 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;

      Примечание

      Освобождение памяти, занимаемой данными структуры ItemlDList, можно выполнить и более простым способом: использовать API-функцию CoTaskMemFree, передав ей адрес структуры в качестве следующего параметра: CoTaskMemFree(pidl).

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

      choose.ulFlags := BIF_BROWSEFORCOMPUTER;

      или

      choose.ulFlags := BIF_BROWSEFORPRINTER;

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

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

      Часто СКАЧАТЬ