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