Программирование с C++ Builder
508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

Внесение изменений



После нескольких запусков программы "Сила тока" возникает желание усовершенствовать программу, внести в нее изменения. Например, такие, чтобы после ввода напряжения в результате нажатия клавиши <Enter> курсор переходил в поле Сопротивление, а после ввода сопротивления в результате нажатия этой же клавиши выполнялся расчет. Кроме того, было бы неплохо, чтобы пользователь мог вводить в поля редактирования только числа. Чтобы внести изменения в программу, нужно запустить C++ Builder и открыть соответствующий проект. Сделать это можно обычным способом, выбрав в меню File команду Open Project. Можно также воспользоваться командой Reopen из меню File. При выборе команды Reopen открывается список проектов, над которыми работал программист в последнее время. В листинге 2.4 приведена программа "Сила тока", в которую внесены изменения: добавлены функции обработки событий onKeyPress для компонентов Edit1 и Edit2. Чтобы добавить в программу функцию обработки события, надо в окне Object Inspector выбрать компонент, для которого нужно создать функцию обработки события, на вкладке Events выбрать событие и сделать двойной щелчок в поле рядом с именем события. C++ Builder сформирует шаблон функции обработки события. После этого можно вводить инструкции, реализующие функцию.

Листинг 2.4. Функции обработки событий на компонентах формы программы "Сила тока"

// щелчок на кнопке Вычислить
void__fastcall TForml::ButtonlClick(TObject *Sender)
{
float u; // напряжение
float r; // сопротивление
float i; // ток
// проверим, введены ли данные в поля Напряжение и Сопротивление
if ( ((Editl-XText).Length() == 0) || ((Edit2->Text).Length() ==0))
{
MessageDlg("Haдo ввести напряжение и сопротивление",
mtlnformation, TMsgDlgButtons() << mbOK, 0);
if ((Editl->Text).Length() == 0)
Edit1->SetFocus(); // курсор в поле Напряжение else
Edit2->SetFocus(); // курсор в поле Сопротивление return; };
// получить данные из полей ввода
u = StrToFloat(Editl->Text) ;
r = StrToFloat(Edit2->Text);
// вычислить силу тока try
{
i = u/r;
}
catch (EZeroDivide &e)
{
ShowMessage("Величина сопротивления не должна быть равна нулю");
Edit2->SetFocus(); // курсор в поле Сопротивление
return;
}
// вывести результат в поле Label4
Label4->Caption = "Ток : " +
FloatToStrF(i,ffGeneral,7,2) + " А";
}
// нажатие клавиши в поле Напряжение
void __fastcall TForml::EditlKeyPress(TObject *Sender, char SKey)
{
// коды запрещенных клавиш заменим нулем, в результате
// символы этих клавиш в поле редактирования не появятся
// Key — код нажатой клавиши
// проверим, является ли символ допустимым
if ( ( Key >= '0') && ( Key <= '9'})
// цифра return;
// Глобальная переменная DecimalSeparator
// содержит символ, используемый в качестве разделителя
// при записи дробных чисел
if ( Key == DecimalSeparator)
{
if ( (Editl-XText).Pos(DecimalSeparator) != 0)
Key =0; // разделитель уже введен return;
}
if (Key == VK_BACK) // клавиша <Backspace>
return;
if ( Key == VK_RETURN) // клавиша <Enter>
{
Edit2->SetFocus() ;
return;
};
// остальные клавиши запрещены Key =0;
// не отображать символ
}
// нажатие клавиши в поле Сопротивление
void__fastcall TForml::Edit2KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
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_RETORN) // клавиша <Enter>
(
Buttonl->SetFocus(); // переход к кнопке Вычислить
// повторное нажатие клавиши <Enter>
// активизирует процесс вычисления тока
return;
};
// остальные клавиши запрещены Key = 0; //не отображать символ
}
// щелчок на кнопке Завершить
void __fastcall TForml::Button2Click(TObject *Sender)
{
Forml->Close(); // закрыть форму приложения }

508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.