Якщо підпрограма модуля призначена для обробки компонентів, то така підпрограма обов'язково повинна мати вхідний параметр – змінну-форму.
Такий параметр описується так:
ім'я: tform;
При цьому звертання до компонентів на формі записується так:
tтип_компонента(ім'я.controls[i]) //звертання до компонента з номером i
tтип_компонента(ім'я.activecontrol) //звертання до активного компонента
Приклад. У модуль zapros.pas додати підпрограму-функцію для визначення максимального значення в масиві полів.
На формі може розташовуватися довільне число різнотипних компонентів, тому поля масиву потрібно якось відокремити. Це можна зробити, привласнюючи їм однакове значення у властивості tag. Значення цієї властивості буде першим параметром підпрограми.
Для звертання до компонентів другим параметром підпрограми буде змінн-форма.
У розділі Interface модуля додамо заголовок підпрограми-функції.
function max_min(n:integer; f:tform):real;
У розділі Implementation напишемо код реалізації підпрограми.
//функція визначення максимального
function max_mas(n:integer; f:tform):real;
var rez:real; i:integer;
begin
//спочатку максимум нескінченно малий
rez:=-100000;
//у циклі проходимо по всіх компонентах форми
for i:=0 to f.controlcount-1 do
//якщо i-й компонент поле (тільки поля масиву мають tag =n)
if f.controls[i].tag=n then
//якщо i-й компонент-поле не порожній
if tedit(f.controls[i]).text<>'' then
//якщо значення i-го компонента більше максимуму
if rez<strtofloat(tedit(f.controls[i]).text) then
//запам'ятовуємо це поле як максимальне
rez:=strtofloat(tedit(f.controls[i]).text);
//якщо результат не нескінченно малий (були введені дані)
if rez<>-100000 then
//функції присвоюємо результат
max_mas:=rez
//інакше, якщо результат нескінченно малий (немає введених даних)
else
//функції присвоюємо 0
max_mas:=0;
end;
Нехай є форма Form1 з 10 текстовими полями масиву й полем Edit11 для відповіді. Усі поля масиву мають властивість Tag=1. На формі є кнопка, яка визначає максимальне значення масиву й записує його в поле Edit11.
Скопіюйте файл модуля zapros.pas у папку із програмою. У коді форми підключіть модуль zapros.
Для кнопки напишіть код:
procedure Tform1.Button1Click(Sender: Tobject);
begin
//параметри підпрограми задаються так:
//1 – значення властивості tag полів масиву
//form1 – ім'я форми, на якій розташований масив
edit11.text:=floattostr(max_mas(1,form1));
end;
Питання для самоконтролю
1. В чому перевага модульного програмування?
2. Дайте характеристику принципу "інформаційної закритості даних" в модулях.
3. Дайте визначення модуля в Onject Pascal.
4. Яку структуру має модуль в Object Pascal?
5. Опишіть розділ Interface модуля в Object Pascal.
6. Опишіть розділ Implementation модуля в Object Pascal.
7. Опишіть принцип створення і використання модуля в Object Pascal.
8. Як в модулі описати текстові константи?
9. Які особливості має принцип створення в модулі підпрограм для обробки компонентів?
10. Приведіть приклад підпрограми знаходження суми текстових полів на формі.
Лекція №10
Тема: Створення бібліотек та сервісів.
Мета: Придбання знань зі створення статичних та динамічних бібліотек. Використання бібліотек при розробці програм.
Перелік питань, що розглядаються на лекції:
1. Поняття DLL
2. Створення DLL бібліотеки в Delphi
3. Внесення форм в DLL
4. Використання DLL бібліотеки