Вычисление арифметических выражений: модель
Вычисление арифметических выражений: представление
Теперь построим интерфейс программы. В верхней части окна будет размещён выпадающий список (компонент TComboBox), в котором пользователь вводит выражение (рис. 7.24). При нажатии на клавишу Enter выражение вычисляется и его результат выводится в последней строке многострочного редактора текста (компонента ТМеmо). Список полезен для того, чтобы можно было вернуться к уже введенному ранее выражению и исправить его. Для этого каждое новое выражение будем добавлять в выпадающий список.
Рис. 7.24
Итак, на форму нужно добавить компонент TComboBox (группа Standard). Чтобы прижать его к верху, установим свойство Align, равное alTop. Назовем этот компонент Input (в переводе с англ. — ввод).
Добавляем второй компонент — ТМешо (группа Standard), устанавливаем для него выравнивание alClient (заполнить всю свободную область) и имя Answers (в переводе с англ. — ответы). Для того чтобы пользователь не мог менять поле вывода, для компонента Answers устанавливаем логическое свойство Readonly (только для чтения), равное True.
Логика работы программы может быть записана в виде псевдокода:
если нажата клавиша Enter то х:= значение выражения добавить результат вычислений в конец поля вывода если выражения нет в списке то добавить его в список все все
Для перехвата нажатия клавиши Enter будем использовать обработчик OnKeyPress компонента Input. Клавиша Enter имеет код 13, поэтому условие «если нажата клавиша Enter» запишется в виде
if Кеу=#13 then begin end;
Значение выражения будем вычислять с помощью функции Calc:
х:= Calc(Input.Text);
Эта функция находится в модуле Model, который нужно подключить, добавив в начало секции implementation команду
uses Model;
Компонент TMemo содержит массив строк, которые доступны как свойство-массив Lines. Чтобы добавить к ним новую строку (в конец массива), нужно использовать метод Add (в переводе с англ. — добавить):
Answers.Lines.Add (Input.Text+'='+IntToStr(x));
Обратите внимание, что результат вычислений переведен в символьный вид с помощью функции IntToStr.
Строки, входящие в выпадающий список, доступны как свойство-массив Items объекта Input. Метод IndexOf служит для поиска строки в списке и возвращает номер найденного элемента (нумерация начинается с нуля) или значение -1, если образец не найден. Поэтому команда добавления в список новой строки выглядит так:
i:=Input.Items.IndexOf(Input.Text); if i<0 then Input.Items.Insert(0, Input.Text);
Метод Insert добавляет строку в список. На первом месте указывается позиция, в которую добавляется строка (0 — в начало списка). Приведём полностью обработчик OnKeyPress:
procedure TForml.InputKeyPress(Sender: TObject; var Key: char); var x, i: integer; begin if Key=#13 then begin x:=Calc(Input.Text); Answers.Lines.Add(Input.Text+' ='+IntToStr(x)) ; i:=Input.Items.IndexOf(Input.Text); if i<0 then Input.Items.Insert(0, Input.Text); end; end;
Теперь программу можно запускать и испытывать.
Итак, в этой программе мы разделили модель (данные и средства их обработки) и представление (взаимодействие модели с пользователем), которые разнесены по разным модулям. Это позволяет использовать модуль модели в любых программах, где нужно вычислять арифметические выражения.
Часто к паре «модель — представление» добавляют ещё управляющий блок (контроллер), который, например, обрабатывает ошибки ввода данных. Но при программировании в RAD-средах контроллер и представление, как правило, объединяются вместе — контроль данных происходит в обработчиках событий.
Следующая страница Вопросы и задания