Разработав некоторую функцию, программист может использовать ее в другой программе, поместив текст этой функции в раздел implementation. Однако этот способ неудобен, т. к. приходится набирать текст функции зановоили копировать его из текста другой программы.
Создание модуля
Delphi позволяет программисту поместить свои функции и процедуры в отдельный модуль, а затем использовать процедуры и функции модуля в своих программах, указав имя модуля в списке модулей, необходимых программе (инструкция uses).
Чтобы приступить к созданию модуля, нужно сначала закрыть окно формы и окно модуля формы (в ответ на вопрос о необходимости сохранения модуля следует выбрать No, т. е. модуль, соответствующий закрытой форме, сохранять не надо). Затем из меню File нужно выбрать команду New | Unit. В результате открывается окно редактора кода, в котором находится сформированный Delphi шаблон модуля. Его текст приведен в листинге 6.7.
Листинг 6.7. Шаблон модуля
1.unit Unitl;2.interface3.implementation4.end.
Начинается модуль заголовком — инструкцией unit, в которой указано имя модуля. Во время сохранения модуля это имя будет автоматически заменено на имя, указанное программистом.
Слово interface отмечает раздел интерфейса модуля. В этот раздел программист должен поместить объявления находящихся в модуле процедур и функций, которые могут быть вызваны из других модулей, использующих данный.
В раздел implementation (реализация) нужно поместить процедуры и функции, объявленные в разделе interface. В качестве примера в листинге 6.8 приведен модуль программиста, который содержит рассмотренные ранее функции isint и IsFloat.
Листинг 6.8. Модуль программиста
01.unit myjunit;02.interface // объявления процедур и функции,03.// доступных программам,04.// использующим этот модуль05.function Islnt(ch : char) : Boolean;06.// функция Islnt проверяет, является ли символ07.// допустимым во время ввода целого числа08.function IsFloat(ch : char; st: string) : Boolean;09.// Функция IsFloat проверяет, является ли символ допустимым10.// во время ввода дробного числа11.// ей — очередной символ12.// st — уже введенные символы13.implementation // реализация14.// проверяет, является ли символ допустимым15. 16.// во время ввода целого числа17.function Islnt(ch : char] : Boolean;18.begin19.if [ch >= ' 0 ' ) and (ch <= ' 9 ' ] // цифры20.or (ch = #13) // клавиша <enter></enter>21.or (ch = #8) // клавиша22.then Islnt := True // символ допустим23.else Islnt := False; // недопустимый символ24.end; // проверяет, является ли символ допустимым25. 26.// во время ввода дробного числа27.function IsFloat (ch : char; st -. string) : Boolean;28.// ch — очередной символ29.// at — уже введенные символы30.begin31.if (ch >= '0') and (ch <= ' 9 ' ) // цифры32.or (ch = #13) // клавиша <enter></enter>33.or (ch = #8) // клавиша <bacspace></bacspace>34.then35.begin36.IsFloat := True; // символ верный37.Exit; // выход из функции38.end;39.case ch of40.'-': if Length(st) = 0 then IsFloat :- True;41.',': if (Pos(',',st) = 0)42.and (stfLength(st)] >= ' 0 ' )43.and (st[Length(st)] <= ' 9 ' )44.then // разделитель можно ввести только после цифры45.// и если он еще не введен46.IsFloat := True;47.else // остальные символы запрещены48.IsFloat := False;49.end;50.// это раздел инициализации51.// он а данном случае не содержит инструкция52.end.
Сохраняется модуль обычным образом, т. е. выбором из меню File команды Save, Вместе с тем, для модулей повторно используемых процедур и функций лучше создать отдельную папку, нажав ее, например, Units.
Использование модуля
Для того чтобы в программе могли применяться функции и процедуры модуля, программист должен добавить этот модуль к проекту и указать имя модуля в списке используемых модулей (обычно имя модуля программиста помещают в конец сформированного Delphi списка используемых модулей).
В листинге 6.9 приведен вариант программы Поездка на дачу. Процедура обработки события onkeypress в полях ввода исходных данных обращается к функции IsFloat, которая находится в модуле my_unit.pas, поэтому в списке используемых модулей указано имя модуля my_unit.
Листинг 6.9. Использование функции из модуля программиста
01.unit fazenda_;02.interface03.uses04.Windows, Messages, SysOtils, Variants, Classes, Graphics, Controls,05.Forms, Dialogs, StdCtrls,06.my_unit; // модуль программиста07.type08.TForml = class(TForm)09.Editl: TEdit; // расстояние10.Edit2: TEdit; // цена литра бензина11.Edit3: TEdit; // потребление бензина на 100 км12.CheckBoxl: TCheckBox; // True — поездка туда и обратно13.Buttonl: TButton; // кнопка Вычислять14.Label4: TLabel; // поле вывода результата расчета15.Labell: TLabel;16.Label2: TLabel;17.Label3: TLabel;18.procedure EditlKeyPress(Sender: TObject; var Key: Char];19.procedure Edit2KeyPress(Sender: TObject; var Key: Char);20.procedure Edit3KeyPress(Sender: TObject; var Key: Char);21.procedure ButtonlClicklSender: TObject);22.private23.1 Private declarations )24.public25./ Public declarations }26.end;27.var28.Forml: TForml;29.implementation30.1$R *.dfm}31.// нажатие клавиши в поле Расстояние32.procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char);33.begin34.if Key = Char(VK_RETURN)35.then Edit2.SetFocus // переместить курсор в поле Цена36.else If not IsFloat(Key,Edit2.Text) then Key := Chr(O);37.end;38. 39.// нажатие клавиши в поле Цена40.procedure TForml.Edit2KeyPress(Sender: TObject; var Key: Char);41.begin42.if Key = Char(VK_RETURN|43.then Edit3.SetFocus // переместить курсор в поле Потребление44.else If not IsFloat(Key,Edit2.Text) then Key := Chr(O);45.end;46.// нажатие клавиши в поле Потребление47.procedure TForml.Edit3KeyPress(Sender: TObject; var Key: Char];48.begin49.if Key = Char(VK_RETURN)50.then Buttonl.SetFocus // // сделать активной кнопку Вычислить51.else If not IsFloat(Key,Edit2.Text) then Key := Chr(O);52.end;53.// щелчок на кнопке Вычислить54.procedure TForml.ButtonlClicklSender: TObject);55.var56.rast : real; // расстояние57.cena : real; // цена58.potr : real; // потребление на 100 км59.summ : real; // сумма60.mes: string;61.begin62.rast := StrToFloat(Editl.Text);63.eena := StrToFloat(Edit2.Text);64.potr := StrToFloat(Edit3.Text);65.summ := rast / 100 * potr * cena;66.if CheckBoxl.Checked then67.suiim ; = зшпт * 2 ;68.mes := 'поездка на дачу1;69.if CheckBoxl.Checked then70.mes := mes + ' и обратно';71.mes := mes + 'обойдется в ' + FloatToStrFfsumm,ffGeneral,4,2}72.+ ' руб.';73.Label4.Caption := mes;74.end;75.end.
После добавления имени модуля в список модулей, используемых приложением, сам модуль нужно добавить в проект. Для этого из меню Project надо выбрать команду Add to Project и в открывшемся диалоговом окне — имя файла модуля. В результате добавления модуля к; проекту в окне редактора появится вкладка с текстом добавленного к проекту модуля.
Увидеть структуру проекта можно в окне Project Manager, которое появляется в результате выбора соответствующей команды из меню View. В качестве примера на рис. 6.3 приведена структура проекта Поездка на дачу.

После добавления модуля к проекту и включения его имени в список используемых модулей (инструкция uses) можно выполнить компиляцию программы.
