Лабораторная работа № 2.

Общие замечания

Процесс создания программы в C++Builder состоит из двух шагов: сначала нужно создать форму программы (диалоговое окно), а затем функции обработки событий. Форма приложения Windows создается путем добавления в нее компонентов и последующей их настройки.

В форме практически любого приложения есть компоненты, которые обеспечивают интерфейс между программой и пользователем. Такие компоненты называют базовыми. К базовым компонентам относятся:

Label - поле вывода текста; Edit - поле редактирования текста;

Button - командная кнопка; CheckBox - независимая кнопка выбора;

RadioButton - зависимая кнопка выбора; ListBox - список выбора;

ComboBox - комбинированный список выбора.

Вид компонента, его размер и поведение определяют значения свойств (характеристик) компонента.

Основную работу в программе выполняют функции обработки событий.

Исходную информацию программа может получить из полей редактирования (компонент Edit), списка выбора (компонент ListBox) или комбинированного списка (компонент ComboBox). Для ввода значений логического типа можно использовать Компоненты CheckBox и RadoiButton.

Результат программа может вывести в поле вывода текста (компонент Label) или  в окно сообщения (функции ShowMessage, MessageDlg).

Для преобразования текста, например, находящегося в поле редактирования, в целое число нужно использовать функцию StrToint, а в дробное - функцию StrToFloat. Для преобразования целого, например, значения переменной,  в строку нужно использовать функцию IntTostr, а для преобразования дробного - функцию FloatToStr или FloatToStrF.

 

Проект «Конвертор»

Составить проект Конвертор, который пересчитывает цену из долларов в рубли. Поместить на форму: 4 компонента Label и 2 компонента Edit  для ввода и отображения числовых данных, 2 компонента Button.

Проект проектировать так, чтобы пользователь мог ввести в поля редактирования только правильные данные (число). Внешний вид формы приведен на рис.

Задайте свойства компонентов согласно рисунку. Затем напишите обработчики событий согласно приведенных ниже.

 

1.Обработчик, который проверяет, вводится в поле Text  компонента Edit1 число или другой символ:

Для создания обработчика Edit1KeyPress нужно выделить компонент Edit1, перейти на страницу Events Инспектора Объектов (Object Inspector) и в правой колонке таблицы строки OnKeyPress выполнить двойной щелчок мыши. Откроется редактор кода и в этом окне написать код обработчика события Edit1KeyPress. Пример кода приведен ниже.

void _fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

// код запрещенного символа заменим нулем, в результате  символ в поле редактирования не появится

// Key - код нажатой клавиш,  проверим, является ли символ допустимым

if ((Key >= '0') && (Key <= '9'))                       //цифра

return;

if (Key == DecimalSeparator)     // глобальная переменная DecimalSeparator содержит символ,

 //используемый в качестве разделителя при записи дробных чисел

{

if ((Edit1->Text).Pos(DecimalSeparator) != 0)

Key = 0;                                      // разделитель уже введен

return;

}

if (Key == VK_BACK)                         // клавиша  <Backspace>

return;

if   (Key == VK_RETURN)                  // клавиша <Enter>

{

Edit2->SetFocus();

return;

}

// остальные клавший запрещены

 Key = 0;                                                // не отображать символ

}

Обработчик, который проверяет, вводится в поле Text  компонента Edit2 число или другой символ

void _fastcall TForm1::Edit2KeyPress(TObject *Sender,char &Key)

{

if ((Key >= '0') && (Key <= '9'))                       //цифра

return;

if (Key == DecimalSeparator)

{

if ((Edit2->Text).Pos(DecimalSeparator) !=0)

Key = 0;                                                 // разделитель уже введен

return;

}

if (Key == VK_BACK)                                                // клавиша <Backspace>

 return ;

if (Key = VK_RETURN)                                  // клавиша <Enter>

{

Button1->SetFocus();                                        // переход к кнопке Вычислить

 return;

}

Key = 0;  // остальные клавиши запрещены, не отображать символ

                                                              

}

Обработчик для кнопки «Пересчет»

void _fastcall TForm1::Button1Click(TObject *Sender)

{

float usd;                                                            // цена в долларах

float k;                                                     // курс

float rub;                                                 // цена в рублях

// проверим, введены ли данные в поля Цена и Курс

if (((Edit1->Text).Length() ==0) || ((Edit2->Text).Length() == 0))

{

MessageDlg("Надо ввести цену и курс", mtInformation, TMsgDlgButtons() << mbOK, 0);

if ((Edit1->Text).Length() == 0)

Edit1->SetFocus();                                            // курсор в поле Цена

Edit2->SetFocus();                                            // курсор в поле Курс

return;

};

usd = StrToFloat(Edit1->Text);                                    // ввод исходных данных

k = StrToFloat(Edit2->Text);

 

rub = usd * k;                                                                 // вычисление

// вывод результата

Label4->Caption = FloatToStrF(usd,ffGeneral,7,2) +"$ = "+FloatToStrF(rub,ffGeneral,7,2) + " руб." ;

}

Обработчик для кнопки «Выход»

void         fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Close();