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

Чтение книги онлайн.

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

Жанр:
Серия:
Издательство:
Delphi. Трюки и эффекты - Александр Чиртик

Скачать книгу

2.25. Окно сохранения файла

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

      strInitFileName: string = '';

      strTitle: string = 'Сохранение файла'):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_PATHMUSTEXIST or OFN_OVERWRITEPROMPT;

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

      if (GetSaveFileName(ofn) = True) then

      ShowSave := ofn.lpstrFile;

      end;

      Здесь дополнительно к упомянутому ранее флaгyOFN_PATHMUSTEXIST применен флаг OFN_OVERWRI ТЕ PROMPT для того, чтобы при указании имени уже существующего файла был задан вопрос о желании пользователя заменить старый файл.

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

      Вызов следующего диалогового окна – окна выбора цвета – приводится в листинге 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);

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

      Рис. 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;

Скачать книгу