Использование
функции
Если вы собираетесь
использовать в программе свою функцию, то в простейшем случае ее объявление
следует поместить в текст программы, перед подпрограммой, которая применяет
эту функцию.
Рис. 6.1. Окно
программы Поездка на дачу
Следующая программа
(ее текст приведен в листинге 6.4, а вид диалогового окна на рис. 6.1) вычисляет
стоимость поездки на дачу. Исходными данными для программы являются: расстояние,
цена одного литра бензина и потребление бензина на 100 км пути. Для ввода исходных
данных применяются поля Edit1, Edit2 и Edit3. Функции обработки события OnKeyPress
используют функцию
IsFioat для фильтрации вводимых в эти поля символов, во время работы программы
в полях ввода отображаются только допустимые символы.
Листинг 6.4. Пример
использования функций программиста
unit
fazenda_;
interface
Windows, Messages, SysUtils, Variants,
Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1
= class(TForm)
Edit1:
TEdit; // расстояние
Edit2:
TEdit; // цена литра бензина
Edit3:
TEdit; // потребление бензина на 100 км
CheckBox1:
TCheckBox; // True - поездка туда и обратно
Button1:
TButton; // кнопка Вычислить
Label4:
TLabel; // поле вывода результата расчета
Label1:
TLabel;
Label2:
TLabel;
Label3:
TLabel;
procedure EditlKeyPress(Sender: TObject;
var
Key: Char);
procedure Edit2KeyPress(Sender: TObject;
var
Key: Char);
procedure Edit3KeyPress(Sender: TObject;
var
Key: Char);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1:
TForm1;
implementation
{$R
*.dfm}
//
проверяет, является ли символ допустимым
// во время ввода дробного числа
function
IsFloat(ch : char; st: string) : Boolean;
begin
if
(ch >= '0') and (ch <= '9') // цифры
or
(ch = #13) // клавиша <Enter>
or
(ch = #8) // клавиша <Backspace>
then
begin
IsFloat := True; // символ верный
Exit;
// выход из функции
end;
case ch of
'-': if Length(st) = 0 then IsFloat := True; ', ':
if
(Pos(',',st) = 0)
and
(st[Length(st)] >= '0') and (st[Length(st)] <= '9')
then // разделитель можно ввести только после цифры
//
и если он еще не введен
IsFloat
:= True/else // остальные символы запрещены
IsFloat := False;
end;
end;
//
нажатие клавиши в поле Расстояние
procedure TForm1.EditlKeyPress(Sender: TObject;
var
Key: Char);
begin
if
Key = Char(VK_RETURN)
then Edit2.SetFocus // переместить курсор в поле Цена
else
If not IsFloat(Key,Edit2.Text) then Key := Chr(O);
end;
//
нажатие клавиши в поле Цена
procedure TForml.Edit2KeyPress(Sender: TObject;
var
Key: Char);
begin
if
Key = Char(VK_RETURN)
then Edit3.SetFocus // переместить курсор в поле Потребление
else If not IsFloat(Key,Edit2.Text)
then
Key := Chr (0);
end;
//
нажатие клавиши в поле Потребление
procedure TForml.Edit3KeyPress(Sender: TObject;
var
Key: Char);
begin
if
Key = Char(VK_RETURN)
then Buttonl.SetFocus // // сделать активной кнопку Вычислить
else
If not IsFloat(Key,Edit2.Text) then Key := Chr (0);
end;
//
щелчок на кнопке Вычислить
procedure
TForm1.ButtonlClick(Sender: TObject);
var
rast
: real; // расстояние
cena
: real; // цена
potr
: real; // потребление на 100 км
summ
: real; // сумма
mes: string;
begin
rast
:= StrToFloat(Edit1.Text);
cena
:= StrToFloat(Edit2.Text);
potr
:= StrToFloat(Edit3.Text);
summ
:= rast / 100 * potr * cena;
if
CheckBoxl.Checked then summ := summ * 2;
mes
:= 'Поездка на дачу';
if
CheckBoxl.Checked then mes := mes + ' и обратно';
mes := mes + 'обойдется в '
+
FloatToStrF(summ,ffGeneral,4,2) + ' руб.';
Label4.Caption := mes;
end;
end.