Модули в Delphi

Разработав некоторую функцию, программист может использовать ее в другой программе, поместив текст этой функции в раздел implementation. Однако этот способ неудобен, т. к. приходится набирать текст функции зановоили копировать его из текста другой программы. 

Создание модуля

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

Чтобы приступить к созданию модуля, нужно сначала закрыть окно формы и окно модуля формы (в ответ на вопрос о необходимости сохранения модуля следует выбрать No, т. е. модуль, соответствующий закрытой форме, сохранять не надо). Затем из меню File нужно выбрать команду New | Unit. В результате открывается окно редактора кода, в котором находится сформированный Delphi шаблон модуля. Его текст приведен в листинге 6.7.

Листинг 6.7. Шаблон модуля 

1.unit Unitl;
2.interface
3.implementation
4.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.begin
19.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.begin
31.if (ch >= '0'and (ch <= ' 9 ' // цифры
32.or (ch = #13// клавиша <enter></enter>
33.or (ch = #8// клавиша <bacspace></bacspace>
34.then
35.begin
36.IsFloat := True; // символ верный
37.Exit; // выход из функции
38.end;
39.case ch of
40.'-'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.interface
03.uses
04.Windows, Messages, SysOtils, Variants, Classes, Graphics, Controls,
05.Forms, Dialogs, StdCtrls,
06.my_unit; // модуль программиста
07.type
08.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.private
23.1 Private declarations )
24.public
25./ Public declarations }
26.end;
27.var
28.Forml: TForml;
29.implementation
30.1$R *.dfm}
31.// нажатие клавиши в поле Расстояние
32.procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char);
33.begin
34.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.begin
42.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.begin
49.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.var
56.rast : real// расстояние
57.cena : real// цена
58.potr : real// потребление на 100 км
59.summ : real// сумма
60.mes: string;
61.begin
62.rast := StrToFloat(Editl.Text);
63.eena := StrToFloat(Edit2.Text);
64.potr := StrToFloat(Edit3.Text);
65.summ := rast / 100 * potr * cena;
66.if CheckBoxl.Checked then
67.suiim ; = зшпт * 2 ;
68.mes := 'поездка на дачу1;
69.if CheckBoxl.Checked then
70.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) можно выполнить компиляцию программы.

dle

Помоги проекту! Расскажи друзьям об этом сайте: