1 Procedure Name; {Directives;} 2 Procedure Name(Parameters); {Directives;} 3 type Name = Procedure{(Parameters)} {of object};
Ключевое слово Procedure определяет подпрограмму, которая не возвращает значение. Версия 1: Определяет процедуру, которая работает без параметров. Версия 2: Определяет процедуру, которой передаётся один или более параметров. Когда процедура определена в классе, она обычно называют Методом. Пока используется директива Overload, одно и то же имя может использоваться больше чем в одной процедуре. Reintroduce : Переопределяет подавленную функцию Overload : Позволяет иметь одинаковые названия для 2 или более функций Virtual : Может быть переопределен в дочернем классе Override : Переопределяет родительский метод класса Abstract : Вызывает дочерний класс для выполнения Версия 3: Определяет процедуру как тип данных. Это позволяет процедуре быть переданным как параметр, и использоваться как переменная. Определение типов определяет только конфигурацию процедуры - а не название. Переменной данного типа можно присвоить имя любой процедуры с её конфигурацией. Когда присвоено, имя переменной может быть обработано, как будто это название процедуры. См. код примера. Опция Of Object позволяет Вам обращаться к объектному методу. Обращайтесь к переменной такого типа, как будто Вы вызываете объектный метод непосредственно. См. второй пример.
|
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses // Модуль System не нуждается в определении Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Вложение определений формы Procedure ShowSum(a, b : Integer); var total : Integer; begin // Сложение двух чисел total := a + b; // Показ суммы ShowMessageFmt('%d + %d = %d',[a,b,total]); end; // Подпрограмма On Create основной формы - наша основная программа procedure TForm1.FormCreate(Sender: TObject); begin // Показ суммы нескольких пар чисел ShowSum(1,2); ShowSum(245,62); end; end.
1 + 2 = 3 245 + 62 = 307
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type // Сам класс формы TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // В строку функций Procedure ShowMsg(msg : string); begin ShowMessage(msg); end; Procedure ShowLongMsg(msg : string); begin ShowMessage('Текст сообщения = '+msg); end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); type TShowProc = Procedure(msg : string); var showProc : TShowProc; begin // Использование ShowMsg косвенно ShowMessage('Используя ShowMsg косвенно :'); ShowMsg('Привет Мир'); // Использование процедуры ShowMsg непосредственно ShowMessage('Используя ShowMsg непосредственно :'); showProc := ShowMsg; showProc('Снова привет'); // Использоване ShowLongMsg косвенно ShowMessage('Используя ShowLongMsg косвенно :'); showProc := ShowLongMsg; showProc('Снова привет'); end; end.
Используя ShowMsg косвенно : Привет Мир Используя ShowMsg непосредственно : Снова привет Используя ShowLongMsg косвенно : Текст сообщения = Снова привет
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type // Определение простого класса TSimple = class private name : string; public function GetName : string; Procedure SetName(name : string); constructor Create(name : string); end; // Сам класс формы TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Создание простого объекта constructor TSimple.Create(name: string); begin // Save the passed string self.name := name; end; // Возвращение простого имени function TSimple.GetName: string; begin Result := name; end; // Назначение переданного имени Procedure TSimple.SetName(name : string); begin self.name := name; end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); type TNameProc = Procedure(name : string) of object; var simple : TSimple; nameProc : TNameProc; begin // Создание простого объекта simple := TSimple.Create('Brian'); // И установка имени simple.SetName('New name'); // Показ имени объекта ShowMessage('Имя сейчас = '+simple.GetName); // Обращение к методу SetName nameProc := simple.SetName; // И установка имени nameProc('Even newer name'); // Показ имени объекта ShowMessage('Имя сейчас = '+simple.GetName); end; end.
Имя сейчас = New name Имя сейчас = Even newer name
|