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

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

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

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

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

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

Серия:

isbn: 978-5-911-80219-6

isbn:

СКАЧАТЬ ShlObj и ActiveX – для окна выбора папки (второй модуль нужен для дос тупа к интерфейсу IMalloc, зачем – будет рассказано далее);

      • Windows – помимо объявления основных структур и API-функций, этот модуль содержит объявления функций для работы с окнами подключения и отключения от сетевого ресурса (сетевого диска);

      • ShellAPI – для системного окна О программе.

      Вариант использования рассматриваемых в этом разделе диалоговых окон приведен в подразд. «Демонстрационное приложение».

      Примечание

      В приведенных далее примерах вызова диалоговых окон можно увидеть не объявленные, но используемые в программах переменные hApplnst и hParentWnd. Подразумевается, что это глобальные переменные, которые инициализируются вне процедур и функций, приведенных в примерах. Для инициализации этих переменных можно также написать специальную процедуру, например с именем I nit, в которую и передавать значения для hParentWnd и hApplnst.

      Окно открытия/сохранения файла

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

Листинг 2.23. Окно открытия файла

      function ShowOpen(strFilter: string; nFilterIndex: Integer = 0;

      strInitFileName: string = '';

      var

      ofn: OPENFILENAME;

      begin

      ZeroMemory(Addr(ofn), SizeOf(ofn));

      //Формирование буфера (260 символов)

      SetLength(strInitFileName, MAX_PATH);

      PrepareFilterString(strFilter);

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

      ofn.lStructSize := SizeOf(ofn);

      ofn.hWndOwner := hParentWnd;

      ofn.hInstance := hAppInst;

      ofn.lpstrFilter := PAnsiChar(strFilter);

      ofn.nFilterIndex := nFilterIndex;

      ofn.lpstrFile := PAnsiChar(strInitFileName);

      ofn.nMaxFile := MAX_PATH;

      ofn.lpstrTitle := pAnsiChar(strTitle);

      ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or

      OFN_HIDEREADONLY;

      //Отображение окна диалога и обработка результата

      if (GetOpenFileName(ofn) = True) then

      ShowOpen := ofn.lpstrFile;

      end;

      Приведенная в листинге 2.23 функция возвращает не пустую строку – полный путь файла в случае, если пользователь выбрал или ввел имя файла. Здесь главной трудностью является заполнение довольно большой структуры OPENFILENAME. В данном примере используются только базовые возможности диалога открытия файла и лишь некоторые из поддерживаемых им флагов (поле Flags):

      • OFN_FILEMUSTEXIST – при успешном завершении работы диалогового окна можно быть уверенным, что результирующий путь является путем существующего файла;

      • OFN_PATHMUSTEXI ST – не дает ввести имя файла в несуществующей папке (например, при вводе с:\docs\mydocl.doc, если папки docs не существует, будет выдано соответствующее сообщение);

      • OFNHIDEREADONLY – не показывать флажок Только для чтения.

      Отдельно рассмотрим, зачем в приведенном примере вызывается дополнительная функция PrepareFilterString (листинг 2.24).

Листинг 2.24. Преобразование строки фильтра

      procedure PrepareFilterString(var strFilter: string);

      var

      i: Integer;

      begin

      for i := 1 to length(strFilter) do

      if (strFilter[i] = '|') then strFilter[i] := #0;

      end;

СКАЧАТЬ