Определяет подпрограмму, которая не возвращает значение
System unit
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 позволяет Вам обращаться к объектному методу. Обращайтесь к переменной такого типа, как будто Вы вызываете объектный метод непосредственно. См. второй пример.
Похожие команды
Abstract Определяет метод класса, осуществляемый только в подклассах
Const Начинает определение данных с установленными значениями
Function Определяет подпрограмму, которая возвращает значение
Out Идентифицирует стандартный параметр только для вывода
Overload Позволяет 2-м или более подпрограммам иметь одинаковое название
Override Определяет метод, который заменяет виртуальный родительский метод класса
Virtual Позволяет методу класса быть отменённым в производных классах
Dynamic Позволяет методу класса быть заменённым в производных классах
Пример кода : Простой пример
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем 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
Пример кода : Иллюстрирование Procedure и Procedure type
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем 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