Как и в предыдущей лабораторной работе, вначале необходимо создать отдельную папку для сохранения всех файлов данной работы, например, Lab2. Затем, после запуска Delphi и создания нового проекта необходимо сохранить в созданную папку главный модуль под именем Main Unit.pas (вместо предлагаемого Delphi имени Unit 1.pas), а проект под именем Lab2.dpr (вместо Projectl.dpr). После этого можно начинать заполнять главную форму необходимыми компонентами в соответствии с рис. 6. В табл. 2 кратко приведен список свойств различных компонентов главной формы, требующих установок.
Таблица 2. Значения основных устанавливаемых свойств компонентов главной формы | ||
Свойство | Значение | Комментарий |
MainForm: TMainForm | ||
Name | MainForm | Имя переменной для ссылки на форму |
Caption | Калькулятор | Заголовок формы |
BorderStyle | bsDialog | Запрещается растяжение формы |
Label1: TLabel | ||
Caption | 1-е число: | Комментарий к 1-му введенному числу |
Label2: TLabel | ||
Caption | 2-е число: | Комментарий ко 2-му введенному числу |
Label3: TLabel | ||
Caption | Сумма: | Комментарий к выводимому значению |
Label4: TLabel | ||
Caption | Произведение: | Комментарий к выводимому значению |
LabelSum: TLabel | ||
Caption | Значение суммы по умолчанию | |
LabelProduct: TLabel | ||
Caption | Значение произведения по умолчанию | |
Buttonlnput: TButton | ||
Caption | Ввод чисел... | Текст на кнопке |
ButtonExit: TButton | ||
Caption | Выход | Текст на кнопке |
Cancel | True | Указывается, что нажатие клавиши Esc в любом месте формы трактовалось как нажатие на эту кнрпку |
Теперь создадим вторую (вспомогательную) форму для ввода двух чисел. Для этого необходимо выбрать в меню команду File|New Form. В результате будет создана новая форма с соответствующим программным модулем. Модуль необходимо сохранить (командой File|Save) в рабочем каталоге Lab2 в файл Input.pas.
|
|
Таблица 3. Значения основных устанавливаемых свойств компонентов второй формы | ||
Свойство | Значение | Комментарий |
InputForm: TInputForm | ||
Name | InputForm | Имя переменной для ссылки на форму |
Caption | Ввод чисел | Заголовок формы |
BorderStyle | bsDialog | Запрещается растяжение формы |
Labell: TLabel | ||
Caption | 1-е число: | Приглашение для ввода 1-го числа |
Label2: TLabel | ||
Caption | 2-е число: | Приглашение для ввода 2-го числа |
Edit1, Edit2: TEdit | ||
Text | Вводимые значения по умолчанию | |
ButtonOk: TButton | ||
Caption | Ввод чисел... | Текст на кнопке |
Default | True | Указывается, что нажатие клавиши Enter в любом месте формы, кроме кнопок, трактуется как нажатие на эту кнопку |
ButtonCancel: TButton | ||
Caption | Выход | Текст на кнопке |
Cancel | True | Указывается, что нажатие клавиши Esc в любом месте формы трактуется как нажатие на эту кнопку |
ModalResult | mrCancel | Указывается, что при нажатии на эту кнопку форма закрывается с возвратом указанного значения в одноименном свойстве формы ModaiResult |
Теперь можно заполнить созданную вспомогательную форму необходимыми компонентами в соответствии с рис. 7. В табл. 3 кратко приведен список свойств различных компонентов формы, требующих установок.
|
|
После того как обе формы спроектированы, необходимо написать соответствующие обработчики событий для связи форм друг с другом.
В Delphi вспомогательные окна можно выводить на экран в двух режимах с помощью методов формы Show и ShowModal соответственно.
1. Метод Show открывает «немодальное» окно, которое появляется на экране и работает одновременно с вызвавшим его окном. Управление программой передается оператору, стоящему за оператором вызова метода Show. Этот режим обычно не используется для ведения диалога с пользователем. Примером такого рода окон являются окна Редактора кода и Инспектора объектов в Delphi.
Замечание
Вывод диалоговых окон (модальных форм) на экран удобен, если они появляются по центру экрана. Для этого необходимо установить значение свойства Position формы равным psScreenCenter.
2. Метод ShowModal открывает «модальное диалоговое» окно, которое полностью берет на себя дальнейшее управление программой. Модальные окна требуют от пользователя принятия какого-то решения. Для тoro чтобы пользователь мог сообщить о принятом решении, в модальное окно вставляются необходимые интерфейсные элементы. Чаще всего это стандартные кнопки (с надписями «ОК», «Отмена», «Да», «Нет»), которые автоматически выполняют действия закрытия модального окна и помещения значения результата диалога (информации о нажатой кнопке) в свойство формы ModalResult. Свойство ModalResulz может иметь значения mrNone, mrOk, mrCancel, mrYes, mrNo и другие. Вызывающая программа получает это значение после выполнения метода ShowModal и может анализировать его для определения нужного направления своей дальнейшей работы.
Нам необходимо создать обработчик событий в ответ на нажатие кнопки ButtonInput («Ввод чисел...») главной формы, который бы вызывал вспомогательную форму в модальном режиме (листинг 3). Для этого прежле всего следует указать, что вспомогательный МОДУЛЬ Input.pas будет использоваться в главном модуле MainUnit.pas. Необходимо открыть модуль MainUnit.pas, выбрать команду меню File|Use Unit... и указать в диалоге модуль Input.pas. Это приведет к тому, что в главном модуле в секции implementation появится строка «uses Input;».
Главным в создаваемом обработчике является метод ShowModal формы InputForm, который останавливает выполнение основной программы и передает управление вспомогательной форме. В зависимости от результата выполнения метода ShowModal (нужно выполнить проверку на равенство результата значению mrOk) необходимо выполнить действия по вычислению суммы и произведения чисел и вывести полученные значения в соответствующих метках главной формы.
Во вспомогательной форме необходимо написать обработчик событий для кнопки Buttor.Ok («OK»), ко торый должен проверить правильность введения чисел и, если все верно, то закрыть форму с результатом mrOk. Для второй кнопки BuLtonCancel («Отмена») обработчик писать не нужно, т.к. у этой кнопки уже выставлено свойство ModalResult, говорящее о том, что форма должна быть закрыта при нажатии на эту кнопку.
Теперь программу можно выполнять. На рис. 8-9 приведён внешний вид разработанного приложения.
В листингах 2-4 приведены тексты файла проекта и обоих модулей.