Основным свойством компонента Edit является свойство Text, в котором содержится вводимый текст. Это свойство можно устанавливать в процессе проектирования или задавать программно. В отличие от меток, невозможно установить выравнивание текста и перенос слов. Текст, не помещающийся по длине в окно, просто сдвигается и пользователь может перемещаться по нему с помощью курсора.
Т.к. свойство Text имеет строковый тип, то при использовании компонента Edit для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел:
IntToStr(value: integer): string - преобразует целое число в строку;
FloatToStr(value: extended): string - преобразует вещественное число в строку;
StrToInt(const s: string): integer – преобразует строку в целое число;
StrToFloat(const s: string): extended – преобразует строку в вещественное число.
Например, в поля Edit1 и Edit2 вводятся два числа, причем в Edit1 вводится целое число, а в Edit2 – вещественное. Нужно в Edit3 вывести сумму этих чисел.
// - - - - Object Pascal - - - -
var
a: integer;
b: real;
begin
a := StrToInt(Edit1.Text);
b := StrToFloat(Edit2.Text);
Edit3.Text := FloatToStr(a + b);
end;
// - - - - - - - C++ - - - - - - -
{
int a;
double b;
a = StrToInt(Edit1->Text);
b = StrToFloat(Edit2->Text);
Edit3->Text = FloatToStr(a + b);
}
Компонент Edit можно использовать и просто для отображения текста. Для этого надо установить в false свойство ReadOnly. В этом случае пользователь не сможет изменить отображаемый текст.
Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена, в противном случае значение MaxLength указывает максимальное число символов, которое может ввести пользователь.
Свойство Modified, доступное только во время выполнения программы, показывает, проводилось ли редактирование текста в окне. Если оно равно true, то было произведено редактирование, если false, то текст в поле не изменялся.
Кнопки являются управляющими элементами и используются для выдачи команд на выполнение определенных функциональных действий. На поверхности кнопка может содержать текст и/или графический рисунок.
Система Delphi предлагает несколько компонентов, представляющих собой различные варианты кнопок (рис. 6):
стандартная кнопка
Button
;
кнопка с рисунком
BitBtn
;
кнопка быстрого
доступа SpeedButton
.
Простейшей и, пожалуй, наиболее часто используемой, является кнопка Button, которая может содержать на своей поверхности надпись, поясняющую назначение и описание действий, выполняемых при ее нажатии. Эта надпись хранится в свойстве Caption.
Основным событием для кнопки является событие OnClick, возникающее при ее нажатии. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке.
Кнопка BitBtn отличается от Button тем, что может содержать на своей поверхности не только текст, но и изображение (определяется свойством Glyph).
Кнопка SpeedButton по своему виду и функциональным возможностям схожа с кнопкой BitBtn. Она так же, как и кнопка с рисунком, имеет свойства Caption и Glyph, но в отличие от других кнопок, SpeedButton помимо обычного и нажатого состояний имеет третье состояние – выбранное (включенное). Выбрана кнопка или нет, определяет свойство Down. Если свойство имеет значение true, то кнопка выбрана, если false – не выбрана. Как правило, кнопки SpeedButton используются группами. В каждой группе может быть нажата только одна кнопка.
Создадим с помощью Delphi или C++ Builder простейший калькулятор.
Запустите среду разработки с помощью меню Пуск / Программы. Для создания нового приложения нужно выполнить команду Файл / Новый и в открывшемся каскадном меню выбрать пункт Приложение (Application).
На пустую форму поместите текстовое поле. Для этого выделите пиктограмму Edit на странице Standard Панели компонентов, а затем щелкните курсором мыши в нужном вам месте формы. На форме появилось текстовое поле, которому по умолчанию будет присвоено имя Edit1. Выделите компонент Edit1. На странице Properties Инспектора объектов появятся все свойства данного компонента. Найдите свойство Text и сотрите текст, отображаемый по умолчанию (Edit1).
Таким же образом добавьте на форму кнопки. Примерный вид формы показан на рис. 7.
Выделите кнопку Button1, измените имя кнопки (Name) на Button0 и свойство Caption на 0. Перейдите в Инспекторе на страницу событий (Events) и найдите событие OnClick. Сделайте двойной щелчок в поле справа от имени этого события. Это стандартный способ задания обработчиков любых событий, но перейти в обработчик события OnClick кнопки можно и иначе: достаточно дважды щелкнуть на компоненте Button0. В обоих случаях вы окажетесь в окне Редактора кода и увидите текст:
procedure TForm1.Button0Click(Sender: TObject);
begin
end;
Заголовок этой процедуры складывается из имени класса вашей формы (TForm1), имени компонента (Button0) и имени события (Click).
При нажатии на кнопку нужно чтобы к тексту Edit1 добавился символ 0. Это можно сделать с помощью следующего кода:
// - - - - Object Pascal - - - -
procedure TForm1.Button0Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '0';
end;
// - - - - - - - C++ - - - - - - -
void __fastcall TForm1::Button0Click(TObject *Sender)
{
Edit1->Text = Edit1->Text + '0';
}
Откомпилируйте свое приложение и убедитесь, что оно работает.
При нажатии на кнопки операций сложения и вычитания нужно выполнить следующие действия:
запомнить в переменную a введенное число;
запомнить операцию; для этой цели добавим целочисленную переменную operation_code, принимающую значение 1, если нажата кнопка «+» и 2, если «-»;
установить признак того, что в Edit1 будет вводиться новое число (логическая переменная new_number).
Все необходимые глобальные переменные надо предварительно описать:
// - - - - Object Pascal - - - -
var
a, b: integer;
operation_code: integer;
new_number: boolean;
// - - - - - - - C++ - - - - - - -
int a, b;
int operation_code;
bool new_number = true;
В обработчике события OnClick кнопки ButtonPlus напишем следующий код:
// - - - - Object Pascal - - - -
procedure TForm1.ButtonPlusClick(Sender: TObject);
begin
a := StrToInt(Edit1.Text);
operation_code := 1;
new_number := true;
end;
// - - - - - - - C++ - - - - - - -
void __fastcall TForm1::ButtonPlusClick(TObject *Sender)
{
a = StrToInt(Edit->Text);
operation_code = 1;
new_number = true;
}
Дополним обработчик события нажатия кнопки «0»:
// - - - - Object Pascal - - - -
procedure TForm1.Button0Click(Sender: TObject);
begin
if new_number then
begin
Edit1.Text := '0';
new_number := false;
end
else Edit1.Text := Edit1.Text + '0';
end;
// - - - - - - - C++ - - - - - - -
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (new_number)
{
Edit->Text = '3';
new_number = false;
}
else Edit->Text = Edit->Text + '3';
}
Кнопки с остальными цифрами будут содержать аналогичный код.
При нажатии кнопки «=» выполняются следующие действия:
из Edit1 считывается второе число;
в зависимости от значения переменной operation_code выполняется операция;
в поле Edit1 выводится ответ;
установить признак ввода нового числа.
Обработчик нажатия кнопки ButtonEqual:
// - - - - Object Pascal - - - -
procedure TForm1.ButtonEqualClick(Sender: TObject);
var
c: integer;
begin
b := StrToInt(Edit1.Text);
case operation_code of
1: c := a + b;
2: c := a - b;
end;
Edit1.Text := IntToStr(c);
new_number := true;
end;
// - - - - - - - C++ - - - - - - -
void __fastcall TForm1::ButtonEqualClick(TObject *Sender)
{
int c = 0;
b = StrToInt(Edit->Text);
switch (operation_code)
{
case 1: c = a + b; break;
case 2: c = a - b; break;
}
Edit->Text = IntToStr(c);
new_number = true;
}
Для очистки поля Edit1 в обработчике нажатия кнопки «С» напишем следующий код:
// - - - - Object Pascal - - - -
procedure TForm1.ButtonClearClick(Sender: TObject);
begin
Edit1.Clear;
end;
// - - - - - - - C++ - - - - - - -
void __fastcall TForm1::ButtonClearClick(TObject *Sender)
{
Edit->Clear();
}
Для того чтобы сохранить приложение, нужно выполнить команду File / Save All.
Лабораторное задание
Написать программу «Калькулятор», выполняющую операции сложения, вычитания, умножения, деления, возведения в квадрат, извлечения корня.
Программа должна обрабатывать все нестандартные ситуации (деление на ноль, извлечение корня из отрицательного числа и т. д.).
Указания по оформлению отчета
Отчет должен содержать:
наименование и цель работы;
краткие теоретические сведения;
задание на лабораторную работу;
результаты выполнения лабораторной работы.
контрольные вопросы
Что такое ООП? Какие принципы лежат в его основе?
Что такое класс? Из каких разделов состоит описание класса?
Из каких файлов состоит проект Delphi (C++ Builder)?
Какие свойства и события имеют компоненты Label, Edit, Button?