Печатать книгуПечатать книгу

§ 7. Работа со стандартными диалогами

Сайт: Профильное обучение
Курс: Информатика. 11 класс (Повышенный уровень)
Книга: § 7. Работа со стандартными диалогами
Напечатано:: Гость
Дата: Среда, 8 Май 2024, 02:46

7.1. Стандартные диалоги

Практически любое приложение Windows использует стандартные диалоги, встроенные в операционную систему, для открытия и сохранения файлов, выбора атрибутов шрифта или установки цвета, поиска текста, печати. В библиотеку VCL включены компоненты, реализующие соответствующие окна. Они размещены на панели Dialogs (пример 7.1). В примере 7.2 приведены некоторые компоненты для реализации стандартных диалогов Windows.

Объекты странице Dialogs, невидимы во время выполнения, поэтому место их размещения на форме не имеет значения (пример 7.3). Внешний вид окна диалога зависит от версии Windows.

Вызов и обработка диалогов происходит программно. Для всех диалогов определен метод Execute: bool (пример 7.4). С помощью этого метода происходит открытие окна соответствующего диалога. Значение true присваивается функции Execute в случае, если пользователь щелкнул по кнопке Ok (выполнил двойной щелчок по выбранному элементу или нажал клавишу Enter). В свойствах компонента-диалога запоминается выбор пользователя, который затем можно обработать. Если в диалоге была нажата кнопка отмена или клавиша Esc, то функция получит значение false

Пример 7.1. Панель Dialogs.

Пример 7.2. Список некоторых стандартных диалогов.

Компонент

Назначение

Создание окна диалога «Открыть файл»

Создание окна диалога «Сохранить файл»

Создание окна диалога «Открыть рисунок»

Создание окна диалога «Сохранить рисунок»

Создание окна диалога «Шрифт» — выбор атрибутов шрифта

Создание окна диалога «Цвет» — выбор цвета

Создание окна диалога «Печать»

Пример 7.3. Диалоговые компоненты и кнопки для их вызова на форме:

Пример 7.4. Стандартное обращение к диалогу:

if (<имя диалога> -> Execute)
<команды, использующие выбор пользователя>

7.2. Диалоги для работы с цветом и шрифтом

Для вызова стандартного окна установки атрибутов шрифта можно использовать компонент FontDialog (пример 7.5). В окне Шрифт пользователь может выбрать имя шрифта, его стиль, размер, цвет. Основное свойство компонента — Font типа TFont. Метод, который позволит присвоить значения всех выбранных атрибутов шрифта, шрифту компонента — метод Assign.

Для вызова стандартного окна установки цвета используется компонент ColorDialog (пример 7.6). В нем можно выбрать цвет из базовой палитры. Основное свойство компонента ColorDialog — Color. Это свойство соответствует тому цвету, который пользователь выбрал в диалоге. Дополнительные возможности описаны в Приложении.

Пример 7.7. Создать проект «Форматирование надписи». Для надписи на форме выбрать атрибуты текста с помощью диалогового окна Шрифт. Цвет фона выбрать с помощью диалогового окна Цвет.

Этапы выполнения задания

  1. Поместить на форму компоненты: FontDialog1, ColorDialog1, Label1, Button1, Button2.
  2. Изменить свойство Caption компонента Label1 — «Пример работы с диалогами».
  3. Установить значение false для свойства Transparent (прозрачность) у компонента Label1.
  4. Изменить свойство Caption компонента Button1 на «Смена атрибутов текста».
  5. Изменить свойство Caption компонента Button2 на «Смена цвета фона».
  6. Написать обработчик события OnClick для компонента Button1.
  7. Написать обработчик события OnClick для компонента Button2.

Пример 7.5. Стандартный диалог для настроек шрифта:

Пример 7.6. Стандартный диалог для выбора цвета:

Пример 7.7. Форма на этапе конструирования:

Обработчик события OnClick для компонента Button1

void __fastcall TForm1::Button1Click
                TObject *Sender)

{

  if (FontDialog1 -> Execute())

    Label1 -> Font ->

    Assign(FontDialog1 -> Font);

}

Обработчик события OnClick для компонента Button2

void __fastcall TForm1::Button2Click
                (TObject *Sender)

{

  if (ColorDialog1 -> Execute())

    Label1 -> Color =

    ColorDialog1 -> Color;

}

7.3. Диалоги для работы с файлами

Диалоги для открытия и сохранения файлов (пример 7.8) используются в различных приложениях. Основное свойство компонентов OpenDialog и SaveDialog, в котором имя файла возвращается в виде строки, — это свойство FileName. Если задать данное свойство на этапе конструирования в окне инспектора объектов, то при открытии диалога, оно будет появляться в строке Имя файла.

Пример 7.9. Создать проект «Числа». Сгенерировать случайные числа в заданном диапазоне и сохранить их в файл. Посчитать сколько в файле чисел, кратных заданному. Результат вывести на форме.

Этапы выполнения задания

  1. Поместить на форму компоненты: OpenDialog1, SaveDialog1, LabeledEdit1, LabeledEdit2, LabeledEdit3, LabeledEdit4, Button1, Button2, Label1.
  2. Изменить свойство Caption компонента LabeledEdit1 — «Количество чисел».
  3. Изменить свойство Caption компонента LabeledEdit2 — «Начало промежутка».
  4. Изменить свойство Caption компонента LabeledEdit3 — «Конец проежутка».
  5. Изменить свойство Caption компонента LabeledEdit4 — «Число».
  6. Очистить свойство Caption компонента Label1.
  7. Изменить свойство Caption компонента Button1 — «Записать числа в файл».
  8. Изменить свойство Caption компонента Button2 — «Искать кратные в файле».
  9. Написать обработчик события OnClick для компонента Button1.
  10. Написать обработчик события OnClick для компонента Button2.
  11. Подключить библиотеки:
    #include <fstream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
  12. Дописать строку:

using namespace std;

Имя файла, которое принимает диалог, является строкой. В системе программирования CBuilder поддерживается свой собственный тип строк: String. Для совместимости этого типа строк с типом string, необходимо преобразование, которое можно выполнить, используя команду c_str().

Далее работа с текстовыми файлами происходит так же, как и в среде CodeBlocks.

Рассмотрим некоторые свойства диалогов для работы с файлами.

Типы искомых файлов, появляющиеся в строке Тип файла, задаются свойством Filter. Данное свойство можно задать на этапе проектирования, нажав кнопку  около свойства Filter в окне инспектора объектов (пример 7.10). Редактор фильтров позволяет устанавливать маски шаблонов файлов. В поле Filter Name задается тот текст, который пользователь увидит в строке Тип файла окна диалога. В столбце Filter задается шаблон (символ «*» обозначает любой набор символов, символ «?» заменяет один любой символ).

Свойство DefaultExt определяет значение расширения файла, задаваемое по умолчанию. Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если значение задано, то имя файла можно указывать без расширения (пример 7.11).

Свойство FilterIndex определяет номер фильтра, который увидит пользователь при открытии окна диалога.

Свойство InitialDir компонентов OpenDialog и SaveDialog позволяет настроить папку (пример 7.12), содержимое которой будет открываться при первом вызове диалогового окна. Если значение не установлено, то в первый раз будет открываться папка Мои документы, в дальнейшем — последняя использовавшаяся папка.

Свойство Title позволяет задать заголовок диалогового окна..

Пример 7.8. Стандартные диалоги для открытия и сохранения файла:

Пример 7.9. Форма на этапе конструирования:

Обработчик события OnClick для компонента Button1

void __fastcall TForm1::Button1Click(
TObject *Sender)

{

  srand(time(NULL));

  int n = StrToInt(LabeledEdit1 -> Text);

  int a = StrToInt(LabeledEdit2 -> Text);

  int b = StrToInt(LabeledEdit3 -> Text);

  if (SaveDialog1 -> Execute()) {

  String s = SaveDialog1 -> FileName;

  ofstream fout(s.c_str());

  fout << n << endl;

  for (int i = 0; i < n; i++){

    int x = rand() % (b - a + 1) + a;

    fout << x << endl;

  }

  fout.close();

  }

}

Обработчик события OnClick для компонента Button2

void __fastcall TForm1::Button2Click
                TObject *Sender)

{

  int z = StrToInt(LabeledEdit4 -> Text);

  if (OpenDialog1 -> Execute()) {

    String s = OpenDialog1 -> FileName;

    ifstream fin(s.c_str());

    int n, k = 0;

    fin >> n;

    for (int i = 0; i < n; i++){

      int x;

      fin >> x;

      if (x % z == 0)

        k++;

    }

    Label1 -> Caption ="Найдено " +

    IntToStr(k) + чисел";

  }

}

Работающее приложение:

Содержимое текстового файла:

Пример 7.10. Свойство Filter:

Пример 7.11. Окно Сохранение

В инспекторе объектов установлены фильтры, которые описаны в примере 7.10. Значения свойств DefaultExt и FilterIndex:

Пример 7.12. Если необходимо, чтобы при сохранении или загрузке файла открывалась текущая папка (папка, в которой находится скомпилированный файл проекта), то в событии FormCreate необходимо прописать команды:

OpenDialog1 -> InitialDir = ExtractFilePath(ParamStr(0));
SaveDialog1 -> InitialDir =
OpenDialog1 -> InitialDir;

Вопросы к параграфу

1. Для чего предназначены компоненты, размещенные на панели Dialogs?

2. Какой метод определен для всех диалогов?

3. С помощью какого диалога можно изменить свойства шрифта?

4. С помощью какого диалога можно изменить цвет?

5. Какое свойство является основным у диалога выбора цвета?

6. Какие диалоги предназначены для работы с файлами?

7. Какое свойство является основным у диалогов работы с файлами?

Упражнения

   

1. Создайте проект «Код цвета». При помощи стандартного диалога выбирается цвет панели (событие OnClick для панели). Разложите этот цвет на составляющие. Составляющие цвета отражаются на соответствующих цветовых панелях. Числовое значение цвета выводится в десятичном и *(или) шестнадцатеричном представлении. Для выделения красной, зеленой или синей составляющей цвета можно воспользоваться функциями GetRValue (TColor n), GetGValue (TColor n), GetBValue (TColor n) соответственно. Функции возвращают числовое значение, которое может быть использовано в качестве параметра функции RGB.

Примерный вид формы:

2. Сгенерируйте случайные числа в заданном диапазоне и сохраните их в файл. Посчитайте сколько в файле простых чисел. Результат вывести на форме. Примерный вид формы может быть таким же, как и в примере 7.9.

3. В текстовом файле записаны числа. Посчитайте числа в вектор. Отсортируйте их по возрастанию. Результат запишите в другой текстовый файл. Выбор файла с данными и результатами осуществляйте с использованием стандартных диалогов работы с файлами. Для использования функции sort подключите библиотеку algorithm.