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

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

СКАЧАТЬ буфера (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_PATHMUSTEXIST or OFN_OVERWRITEPROMPT;

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

      if (GetSaveFileName(ofn) = True) then

      ShowSave:= ofn.lpstrFile;

      end;

      Здесь дополнительно к упомянутому ранее флагу OFN_PATHMUSTEXIST добавлен флаг OFN_OVE RWRITEPROMPT для того, чтобы при указании имени уже существующего файла был задан вопрос, желает ли пользователь заменить этот файл.

      Окно для выбора цвета

      Код вызова следующего окна – окна для выбора цвета – приведен в листинге 2.26.

Листинг 2.26. Окно для выбора цвета

      function ShowChooseColor(lastColor: COLORREF = 0):COLORREF;

      var

      choose: TChooseColor;

      begin

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

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

      choose.lStructSize:= SizeOf(choose);

      choose.hWndOwner:= hParentWnd;

      choose.hInstance:= hAppInst;

      choose.rgbResult:= lastColor;

      choose.lpCustColors:= Addr(colors);

      choose.Flags:= CC_RGBINIT or CC_ANYCOLOR or CC_FULLOPEN;

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

      if (ChooseColor(choose) = True) then ShowChooseColor:= choose.rgbResult

      else ShowChooseColor:= lastColor;

      end;

      Здесь также заполняется специальная структура. Для этого используются следующие флаги:

      • CC_RGBINIT – использовать значение поля rgbResult в качестве предустановленного значения цвета (по умолчанию как ранее выбранного);

      • CC_ANYCOLOR – отображать все доступные предопределенные цвета (левая половина, рис. 2.4);

      Рис. 2.4. Окно для выбора цвета

      • CC_FULLOPEN – раскрывать панель подбора цвета (правая половина окна, рис. 2.4).

      Стоит пояснить, что за переменная, а точнее, адрес, сохраняется в поле lpCustColors – это массив из 16 значений типа COLORREF:

      colors: array [1..16] of COLORREF;

      Обратите внимание на 16 квадратов в левой нижней области окна (рис. 2.4) – это места для определенных пользователем цветов. Для заполнения этой области окна и используются значения из массива colors. Массив может быть как локальным, так и глобальным (что иногда удобнее, так как значения определенных пользователем цветов в этом случае сохраняются между вызовами окна выбора цвета).

      Окно для выбора шрифта

      Для вывода окна для выбора шрифта подойдет функция, приведенная в листинге 2.27.

Листинг 2.27. Окно для выбора шрифта

      function ShowChooseFont(var font: LOGFONT):BOOL;

      var

      choose: TChooseFont;

      begin

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

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

      choose.lStructSize:= SizeOf(choose);

      choose.hWndOwner:= hParentWnd;

      choose.hInstance:= hAppInst;

      choose.lpLogFont:= Addr(font);

      choose.Flags:= CF_BOTH or CF_INITTOLOGFONTSTRUCT;

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

      if (ChooseFont (choose) = True) then

      begin

      CopyMemory(Addr(font), СКАЧАТЬ