Рекомендуемый вид формы приведен на рис. 1.3. Количество минут задается целым числом, секунд — дробным.

Рис. 1.3. Форма программы Скорость бега

// нажатие клавиши в поле Дистанция
procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char);
begin
// Key — символ, соответствующий нажатой клавише.
// Если символ недопустимый, то процедура заменяет его
// на символ с кодом 0. В результате этого символ в поле
// редактирования не появляется и у пользователя создается
// впечатление, что программа не реагирует на нажатие
// некоторых клавиш.
case Key of
1 0 ' . . ' 9 ' : ; // цифры
#8 : ; // клавиша
#13 : Edit2.SetFocus; // при нажатии курсор
// переводится в поле Время-.минут
// остальные символы запрещены else Key :=Chr(0); // символ не отображать end; end;
// нажатие клавиши в поле Время-.минут
procedure TForml.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
1 0' . . ' 9 ' :
#8 : ; // клавиша
#13 : Edit3.SetFocus; // при нажатии курсор
// переводится в поле Время:секунд
// остальные символы запрещены else Key :=Chr(0); // символ не отображать end; end;
// нажатие клавиши в поле Время:секунд
procedure TForml.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
case Key of 1 0' . . ' 9' : ;
',','•' ! // десятичный разделитель begin
Key := DecimalSeparator;
if Pos(DecimalSeparator,Edit3.Text) о О
then Key := Char(0);
end;
#8 ' : ; // клавиша
#13 : Buttonl.SetFocus; // при нажатии клавиши
// активируется кнопка Вычислить
// остальные символы — запрещены
else Key :=Chr(O); // символ не отображать
end;
end;
// щелчок на кнопке Вычислить
procedure TForml.ButtonlClick(Sender: TObject);
var
dist : integer; // дистанция, метров
rain : integer; // время, минуты
sek : real; // время, секунды v: real;
// скорость
begin
// получить исходные данные из полей ввода
dist := StrToInt(Editl.Text);
min := StrToInt(Edit2.Text);
sek := StrToFloat(Edit3.Text);
// дистанция и время не должны быть равны нулю
if (dist = 0) or ((min = 0) and (sek = 0)) then
begin
ShowMessage('Надо задать дистанцию и время.1);
exit;
end;
// вычисление
v := (dist/1000) / ((min*60 + sek)/3600);
// вывод результата
Iabel5.Caption := 'Дистанция: '+ Editl.Text + ' м' + #13 +
'Время: ' + IntToStr(min) + ' мин ' +
FloatToStrF(sek, ffGeneral,4,2) + ' сек ' +
#13 + 'Скорость: ' +
FloatToStrF(v,ffFixed,4,2) + ' км/час';
end;
if Pos(DecimalSeparator,Edit3.Text) о О
then Key := Char(0);
end;
#8 ' : ; // клавиша
#13 : Buttonl.SetFocus; // при нажатии клавиши
// активируется кнопка Вычислить
// остальные символы — запрещены
else Key :=Chr(O); // символ не отображать
end;
end;
// щелчок на кнопке Вычислить
procedure TForml.ButtonlClick(Sender: TObject);
var
dist : integer; // дистанция, метров
rain : integer; // время, минуты
sek : real; // время, секунды
v: real; // скорость
begin •
// получить исходные данные из полей ввода
dist := StrToInt(Editl.Text);
min := StrToInt(Edit2.Text);
sek := StrToFloat(Edit3.Text);
// дистанция и время не должны быть равны нулю
if (dist = 0) or ((min = 0) and (sek = 0)) then
begin
ShowMessage('Надо задать дистанцию и время.1);
exit;
end;
// вычисление
v := (dist/1000) / ((min*60 + sek)/3600);
// вывод результата
Iabel5.Caption := 'Дистанция: '+ Editl.Text + ' м' + #13 +
'Время: ' + IntToStr(min) + ' мин ' +
FloatToStrF(sek, ffGeneral,4,2) + ' сек ' + #13 + 'Скорость: ' +
FloatToStrF(v,ffFixed,4,2) + ' км/час';
end;