Використання функції

Якщо ви збираєтеся використовувати в програмі свою функцію, то в найпростішому випадку її оголошення слід помістити в текст програми, перед підпрограмою, яка застосовує цю функцію.

Рис. 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.